Some advice on learning how to code
2015, June 26

Two month ago, Josh Kraus wrote an article for SkilledUp titled Self-Taught Developers: 6 Tips To Get You Started. As part of the article, he asked me a few questions. Here are all the answers to his questions. As I'm entirely self-taught, maybe this will be useful to somebody who is trying to learn how to code out there. Comments, questions and suggestions are welcome on Twitter at @nicoschuele or by email.

1. What was the very first step you took when beginning to teach your self web development?

I first started by imagining what I wanted to build and worked my way backwards to figure out what I needed to know in order to build my ideas. My first concrete step was to take a credit at a bank so I could order some books from this then new startup, Amazon, that could ship US books to Switzerland. $700 worth of books.

2. What is the first thing you'd tell a beginning developer to do? What do you wish someone would have told you?

To a beginner, I'd say that coding is about building stuff. If you want your learning to be effective, you need to have a lot of ideas about things you'd like to make. Learning for the sake of learning won't bring you very far.

When I started, these were the old days of classic ASP and VBScript. I wish someone would have told me to spend a bit more time outside of the language/framework I chose and explore other languages and methodologies. It would have saved me some time when ASP just disappeared. A junior coder uses the tools he knows. A senior coder uses the tools best suited for the task at hands.

3. Any advice on particular resources to use?

Stay away from gimmicks. Today, there are way too many outlets trying to make money from teaching as learning how to code is a hot stuff at the moment. Keep an eye open for keywords such as "easy". When a resource tells you "easily learn"... ...run the other way. The outlets that "let you code from the comfort of your browser" should be avoided. In the real world, programmers use real tools and they need to know how to set them up properly. Even though we are in 2015, your best bet is still reading books. Before diving into a book, try to figure out what people who read it before you learned from it. Ask what they have built after reading it.

4. Have learning opportunities and resources changed at all between when you first started learning, and now? How so?

A lot! At the time, there were nearly no online tutorials, documentation outside of books was scarce. Video on the web didn't exist. Academia was also not prepared for what was coming and was still teaching students things like COBOL and mainframes programming. Without knowing it, I was lucky I never went to school as I was learning things that students at the time didn't even know existed. It changed a bit today but I still think that schools don't adapt fast enough to the pace of change in the industry. I see that when hiring a junior developer.

5. What are some common challenges novice developers face, and how can they overcome them?

The biggest challenge, and probably the most understated one, for a beginner is to know what he doesn't know. How can you learn something if you don't know what it does and that you will need it? My advice would be to draft a rough learning path - shameless plug: you can use one of mine -, listing learning material you intend to follow and have it reviewed by a senior developer. The web is full of forums and communities that will help you validate your learning path. You can even contact me: a lot of people do and ask me if the resources they gathered for learning are good enough.

6. What are some common mistakes novice developers make when trying to teach themselves?

They don't build enough things. It doesn't need to be a full featured Twitter clone. To Do lists or simple note taking apps are fine. Novices spend a lot of time following tutorials, books, videos and copying the examples. They should absolutely come up with their own things that they build aside from their course examples. That's how they'll face real world issues. That's also what will highlight what they don't know yet. For example, take one of the introduction book on Rails: even though the book will go through building one app from start to finish, a student should have built, or tried to build 20-30 apps by the time he reaches the last chapter.

Another mistake is to only focus on code. A novice should never forget that coding is about solving problems. If you can't understand the problem, there are little chances that you'll solve it. I mostly see that in the corporate world where there are tons of programmers, loaded with diplomas and certifications who simply can't understand the problem the non-programmers would like to be solved by an app. Always learn within a context. To be honest, it is this context that should have brought you to "hey, I need to learn how to code". Whether it is gaming, financial trading, social media or anything else, you need to understand the context that you will help by writing code for it.

7. If you were ever at a point where you wanted to give up, what kept you going? What did you tell yourself for motivation?

Honestly, I never had that happen to me. I'm not a good musician, I can't draw my way out of a paper bag but I consider myself a creative person. Coding is my creative outlet. I need it. And I need to learn. My strongest motivation is to think about these things I'll be able to build which I can't today. Here is why I love coding so much.

If early in his learning path a student struggles with motivation, I'd ask him if there are other things he'd rather be doing than learning how to code... ...and go for that right now rather than slaving on tutorials as ultimately, he'd find no joy in coding. Everybody can learn how to code to a certain degree but that doesn’t mean everybody should be a coder.

8. How long did it take you to get to a level where you could code with confidence?

Not there yet. I've been coding for two decades and I'm not confident in my coding. A quarter of my week is spent learning and experimenting. I'm confident that I can find a solution to a given problem because I know how to search and I know the terminology. There's this huge misconception aspiring programmers have: they think they need to learn a, b and c and that boom, there will be this magical point in time where suddenly they can call themselves a developer. Like, yesterday they are not a developer and today, because they finished this book or that tutorial, they are.

Input the code in the first tutorial you ever read and execute it. Done? You are a coder. You wrote code and it produced an output. Most likely Hello, World!. Now, for the rest of your career you'll expand on that and learn to do more than printing "hello world" in your console. I'm always wary of people introducing themselves as expert coders. What does it mean to be an expert coder, anyway?

9. Any thoughts on making yourself a practice/study schedule?

I recommend to the people I teach to practice every day. At least 30 mins but an hour is advised. Learning how to code is like learning an instrument or a foreign language. It's by practicing every day that you'll feel coding is a natural part of your life and is included in your routine. I don't recommend to cram 8 hours on week-ends and nothing during the week. You want to commit what you learn to long term memory.

10. Any thoughts on participating in forums/online communities as a way to grow?

There's no question here. You can't grow in isolation. As early as possible, try to answer questions other people have. Go create yourself an account on StackOverflow and attempt to answer questions written by others. Do that on forums intended for learners too. It will help you master concepts more quickly. You understand a concept when you can use it. You master it when you can explain it with your own words.

back to top | share this on Twitter:


tutorial

Learn how to code for Windows and/or OS X
2015, May 5

Both web development and mobile apps development are quite trendy things to be doing right now. But what about regular ol' PC or Mac apps? They are known as fat clients and if you look a bit around you, they are everywhere. Computers are not going away anytime soon so being able to build Windows or Mac apps is a great and challenging skill to possess. Just take a look at how many programs you are using on your computer: see? Somebody had to make them at some point and why couldn't this somebody be you?

First, learn how to code

Whether your chosen path is developing for the web, mobile or fat clients, you will need to learn the basics, namely programming. If you've already written code (other than HTML and CSS, that is), you can skip this. If not, continue to read.

At this point in your path, it is way too early to choose what kind of programmer you will become. You need a gentle introduction to what programming really is. There's just the book for that: Python for Kids: A Playful Introduction to Programming. Don't be fooled by its title, this book is very much suited for adults too. It will show you what a program is and how you can build simple ones using the Python programming language.

Choose your path: Microsoft Windows or Apple OS X

Now that you know what programming is and that you wrote your first computer programs, it is time to choose for which platform you want to build apps: Windows or OS X. I won't compare them or enter the any kind of discussion as to which one is better. We'll leave that to the people who believe one is better than the other. While it is perfectly possible to develop Windows apps on a Mac using dual-boot with Bootcamp or running Windows in a virtual machine, just know that if you are going down the OS X path, you'll need a Mac as it is not possible to build Mac apps on Windows.

1. Learn how to make Windows apps

First, you'll need to learn a programming language suited for Windows development. The bits of Python you learned from the previous book won't be enough to create triple A Windows programs. This language is C# (pronounced 'see sharp'). Once again, I know just the book you'll need to get you started: Pro C# 5.0 and the .NET 4.5 Framework (Expert's Voice in .NET). You will both learn the C# language in depth as well as learn how to use Microsoft's code editor tool, Visual Studio. Note that Microsoft offers a free version of Visual Studio, Visual Studio Community, that packs everything you will need to build awesome Windows apps.

Once you are done with this (big) book, I'd advise you to learn even more C# by getting one of my all time favorite technical book: C# in Depth, 3rd Edition. In this book, Jon Skeet will shed a lot of light on topics that may still be a bit obscure such as delegates, events, lambdas, and so on. By the way, if you want to read a bit about delegates and events, I wrote a few tutorials covering just that: Understanding and implementing events in C#.

Now, you are ready for the last bit: Windows Presentation Foundation or WPF for short. WPF is the framework that allows you to create great UI's for your apps and link them to your code. Although the learning curve might be a bit steep, I found that this book by Pavel Yosifovich does a great job at teaching the basics of WPF and beyond: Windows Presentation Foundation 4.5 Cookbook.

If you reached this point, pat yourself on the back, you are now armed to conquer the world of Windows fat clients and an exciting new software developer career is awaiting you! Or maybe, you now want to learn how to build Mac apps? Then, read on.

2. Learn how to code for the Mac

At this point, you have written your first programs using the Python language. It is time to learn another language suited for building Mac apps: Swift. Swift is a rather young language that was first introduced by Apple in June 2014 in order to replace their aging Objective-C programming language. If you ever tried to teach yourself Objective-C but gave up due to its complexity, rejoice: you don't need to anymore! This path only uses resources focusing on Swift.

To learn Swift, Team Treehouse has a great video course. If you use this referral link, you'll get a 50% discount on your first month. I don't think you'll need more than a month for following these courses: Swift Basics, Swift Functions and Optionals, Swift Enums and Structs and Object-Oriented Swift. These courses are taught by Amit Bijlani who does a great job at laying the foundation you'll need in order to learn Cocoa, the Apple framework used to build OS X applications. Don't dismiss the free Apple eBook on Swift, The Swift Programming Language. I would advise you to quickly read it right after Treehouse's lessons. If at some point you need a quick syntax refresher, check out my other site, MySwiftTips: you'll not only find tips and tricks for building iOS and Mac apps, there are also tips dedicated to the Swift language. I've also built a serie of playgrounds you can use to experiment with the Swift syntax: swift-cheatsheet.

Speaking of Cocoa, now is the time to learn it! Get Cocoa Programming for OS X: The Big Nerd Ranch Guide (5th Edition). Aaron Hillegass and team from the Big Nerd Ranch will teach you all the intricacies of building stunning apps for the Mac.

At this point, you should be equipped to distribute some awesome apps on the Mac App Store!

Any other resource?

Do you know of any other great resource you really enjoyed to learn how to build Windows or Mac apps? Let me know or tweet.

back to top | share this on Twitter:


I need a sponsor for the next version of RailsBricks!
2015, April 28

RailsBricks, the Rails app builder, has become quite popular in its one year and a half of existence and is now in its 3rd version. With Rails 5 just around the corner, now is the time to start working on the next RailsBricks iteration.

I would also love to add a new huge feature to RailsBricks 4: an integrated app deployment tool! How amazing would it be to graduate from PaaS and be able to just type rbricks --deploy myserver, letting RailsBricks do all the setup for you (create a user, install and configure a web server, take care of generating and copying your SSH key, etc)?

To make this happen, I will need some help, though. I need one or more sponsors willing to help making RailsBricks 4 the awesomest web app builder (and show their support for a little open-source project with big ambitions).

Why do I need sponsoring for RailsBricks 4?

I have a full time job and am also currently working on several other projects such as Humblepad as well as giving online development courses. Initially, RailsBricks is just a tool I built to make my life easier and go from an idea to a working app as fast as possible. I didn't think it would become a tool used and loved by many but it happened. That is really awesome and I'm happy with this situation but the other side of the coin is that now, I also need time to care for it. For example, each time new versions of Ruby or Rails are released, I take less than a week to produce an updated version of RailsBricks. I keep adding features, fixing quirks, answering support requests and am mostly doing this alone.

The vision I have for RailsBricks 4 has a much larger scope than before. I'd love to give you THE best Rails app builder out there and add more awesome features.

Obviously, this would take some time from me away from all the other things I do and as I still need to eat and pay the rent, this unfortunately has a cost. This is why I'm looking for sponsors that would allow me to take that time in order to make RailsBricks 4 not only happen but also without compromising on my vision. If you are interested in becoming a sponsor (or know people who know people), contact me.

RailsBricks 4 features I'd like to add

As I see it, RailsBricks 4 would pack all the existing (but rewritten) features currently in version 3 and these:

  • the option to create a discussion forum
  • generate both valid Rails 4 and, soon, Rails 5 apps
  • a plug-in system to allow other developers to add features to RailsBricks
  • a complete app deployment tool also able to configure your server from scratch
  • a comprehensive documentation and tutorials

Don't you want this to happen? Then help me! Get in touch and let's talk if you want to know more.

back to top | share this on Twitter: