Posted by Filip Ekberg on 28 May 2014
Rather frequently I get questions from friends, family and strangers asking me about what it's like to work as a software engineer. We've got a good reputation that we are well paid and have fun at work. At least that is what I've noticed people thinking about this occupation. It's not like we're paid as much as movie stars, even though some of us pretend that we are stars, but it still attracts people because of the wages and its reputation.
While studying to become a software engineer, our class had the highest drop-out rate of all programs and largely because the misconception of what a software engineer has to do and has to learn. Some of the people just wanted to party, they would just have dropped out no matter what program they choose, others thought they would just play with computers all day. While "playing” with computers is what we do, it involves a bit more brain cells than playing an easy video game.
When I meet up with family and friends, and strangers they often ask me: So what is it that you really do? This is the question that comes right before Wow, that sounds awesome, how would one become a programmer?. The answer to the first question though varies depending on whom I talk to. When talking to non-techie people I can't drop terms like "continuous integration”, "C#", "Azure” and whatnot; I have to use a language they understand. It's all about using a ubiquitous language, that goes for both working in and outside projects.
So what is it that you really do? I help customers solve problems, to help them increase productivity and revenue, by introducing new software, often hand-crafted to their requirements.
This is a very wide ranged answer, it could mean anything and fit any job description. However, the follow-up questions is always to give an example. It's easier to talk about what kinds of applications I work with now that people are more used to downloading apps for their phones. Generally I tell my friends, family and the occasional strangers that I write websites or mobile applications that helps these customers solve their business problems; this to make their life easier.
Most discussions stop here, it gets too technical when you start talking about "building websites” or "building mobile applications”. Occasionally though, you get a snappy response from someone saying: It's just a website with some fields and text, how hard can that be? That's when you give more examples which are met by a long Oooh…. I didn't know that.
A bunch of my non-engineer friends are tech-savvy and I often do get the question: I Want To Learn Programming, Where Do I Start?
It's a very hard and interesting question, I could of course throw C# and a book on .NET programming in their face, but what good would that do? Is my preferred language really the best option for them as total beginners? Maybe? Maybe not. You have to consider what their goal is when asking this question. Do they just want to get a better understanding of how computers and programs work? Do they want to write prank-ware to joke with their friends? Do they want to solve a problem they're having? Do they want to make you redundant?
First thing I try to do is of course to figure out why they want to learn programming, I think everyone should, but it's a good starting point to get an understanding of what they want to get out of it. Not that it would change my answer but it's still interesting because you can tweak the response.
When you find yourself doing the same thing over and over again, consider automating that with software that you write yourself
If you have a real world problem, or a real goal for that matter, it's easier to suggest a course of action. Writing the software and learning how to write it will most likely take a lot more time than just repeating yourself though, which is something to be honest about and to have in mind. However, when you've learnt how to write your first software, writing the second one should be easier or at least go a bit quicker.
I Want To Learn Programming, Where Do I Start?
It's easy to tell someone to try and solve a real world problem, but it still doesn't tell them how to go by it so what I try to do is to give them a good hand of tools to use. When recommending a tool, a programming language or a book you have to consider that it should not be a too high learning steep to get their first
Hello World program running. If there is no fast results, it's highly likely that the person will just drop-out and give up. Programming isn't only about the code we write, it's about the
things we connect together.
I want the person to get the feeling of accomplishment as fast as possible, it doesn't matter if they wrote a single line of code or not, just that they put something that they can be proud of together. With the excitement of accomplished something quickly they'd be more likely to want to dig deeper and finally ready to start looking at a real programming language; be it C#, Java, Python or any other programming language out there. Early on you want the person to get into the thought process of:
if i do
then I want to do
else I would like to do
The last couple of years there's been a lot of involvement in teaching kids programming and when someone do ask me about how to learn programming that is my answer; learn it just like a kid would. How do we teach kids programming? There's a great resource called Code.org, their approach is to let you put together programs in the web browser and it gives you a feeling of accomplishment quickly. You could for instance create your own Flappy Bird clone with a personal touch. This of course doesn't solve your repetitive work that you so desperately want to speed up, nor does it solve your immediate business problems. It does however get you a sense of what putting together software feels like and what it takes to connect two important pieces together.
There's no simple answer to the question I Want To Learn Programming, Where Do I Start? but there is guidance to be given and depending on your skill and your willingness to learn, there are tons of resources out there for your disposal. Building something in the browser using Code.org is a first step to learning programming, but you have a long way to go. When you're feeling ready for the next step, you might want to pick up a good book at explains the basics of building software for your computer.
Really, I Just Want To Learn Programming, Give Me The Resources!
A lot of people just want to be spoon fed the knowledge and that is unfortunately not possible, it takes time and patience to learn programming. You will learn by making mistakes and you will get a lot of Oh wow, this is really awesome-moments. If you're really dedicated on learning how to build software for your computer, there are a bunch of books that are great for beginners. Even if you don't end up writing your own software, it's an invaluable knowledge that you will have real benefit from in this world of technology.
When I was tutoring Java we used a book called Head First Java which turned out to be a great resource for beginners. A lot of the people in the course had never built anything for a computer before and the language and illustrations in the book really helped them greatly. Head First is a series covering a lot of programming languages and technologies, to get the least friction between where you are now and where you need to go to write your first
Hello World program, I'd suggest Head First Python.
Dislike reading books? Then I'd really recommend checking out Pluralsight's Programming for Kids videos.
If you have kids, learning programming together with them will benefit the both of you. Kids generally have really interesting and good questions which broadens your mind and it's also a great reason to spend more time with your kids! Frankly, I look forward to the day I can teach my kids programming.
After reading a book, playing around with Code.org and possibly watching some videos on Pluralsight you might feel like you're done; or you're feeling like you want more. If you want more I really suggest signing up for a university course or for a weekend/afternoon course in programming. Hopefully by then you'll have enough on your plate to build something interesting for yourself.
That said, here's a list of links to resources that I'd suggest to anyone wanting to learn programming with no prior experience:
- Code Academy
- Code School
- Pluralsight's Programming for Kids
- Head First Books
- Khan Academy
- Hour of Code
As a final suggestion, imagine buying a little hardware, mounting it in your garage and having it signal your car when you get too close to the wall; that is something you can do with something called an Arduino. The possibilities are endless, you just need to find something that tickles your mind and makes you and your family more interested in investing time into programming.
If the discussion lasted this long with my friends, family or strangers they go away with a smile and longing to write their first program.
What is your answer to the question: I Want To Learn Programming, Where Do I Start?
comments powered by Disqus