Becoming a “Programer”

Fedor Bobylev
13 min readMay 24, 2017

--

This is not how actual code looks like

I remember a long long time ago, when I was about 3-4 years old, my dad walked into our house with this very large box in his hands. Sat down on the floor, like a cat, I carefully watched as he pulled out thing after thing from it. One of those things was a large, white metal box and another weirdly shaped box with large glass in front (it looked similar to a TV screen). Dad hooked up snake looking black cables from one box to the other. He pushed a big button and suddenly there was this strange hissing coming out of the box, it made a short BEEN noise and then blue light came out from TV shaped box. My brown eyes also lit up with that very same blue light, my life was never the same again…

My First PC

People often ask me how to learn programing. For me this was always a complicated question, because there isn’t a definitive answer. The actual term programer can get really complicated. In this article I want to briefly describe world of software development and give some tips on getting started.

Why choose software development?

“Every good work of software starts by scratching a developer’s
personal itch” — Eric S. Raymond

For me software development is a tool that allows me to express my creativity and satisfy inner curiosity. In a way your computer is a virtual world were anything is possible. YOU make rules here, YOU can literally create anything you wish. Granted your wishes vary in complexity, some may take up couple of lines of code, some lifetime of work. Either way, this is a playing field and you are the God!

Term programer can also be interpreted as problem solver. Your job will be to solve problem in new and “innovative” ways. Problem solving consists of 2 primary skills: design thinking and logic.

Design thinking is in art mixed with applied science. You often don’t really understand the problem until after the first time you implement a solution. The second time, maybe you know enough to do it right. So if you want
to get it right, be ready to start over at least once. That’s design thinking in a nutshell.

If your going into software development as a way to make quick and easy money and fame — don’t try. Working as a programer isn’t easy, road ahead is filled with challenge and horrors, most of you can’t imagine. In this field passion can really drive you, there will be times when everything seems like it fades away from you and your passion will be one of the big factors not to give up.

My advice for someone who’s just starting out is to have an idea. You can start with something really simple, but useful, something that you don’t have in life, yet ;)

Principles of design thinking

Do I need to know math?

Before we begin I must address this question. The answer is: YES… but no. On the other hand it’s more of a NO… but yes. To be honest there is no definite answer to this question. I think mathematical thinking is very important. By that I mean using logic, being critical minded, thinking in abstracts. With those skills you can start programming and feel pretty confident. BUT, sometimes… you must have concrete knowledge in linear algebra and calculus. Maybe not too in depth just basic concepts can come in handy.

So to keep it brief, you can start without too concrete math knowledge, but learn it when needed. You can easily Google required information…

Which programing language to choose?

Now that you have your dream/idea, real challenge begins. You must choose your first programing language. C/C++, Python, Java, Go, Ruby, PHP, HTML, CSS, SQL, JavaScript, GLSL, Assembly… So many languages, which one to choose O_O

I like to use this one analogy. Good way to think of programing languages is a toolbox. You have a goal — build a chair (or an app in your case). To build a chair you need tools (programing language) and materials (computer hardware). Let’s say you have hammer and a saw in your toolbox. To build a chair you cut down your wood with a saw and put everything together with hammer and nails. If your using just a handsaw it will take you longer to cut your wood down, than electric one.

Same thing applies to programing. Programing language is just a tool. You can choose C++ and do a lot of thing by hand or Python and quickly throw together an app that works.

Let me give you a quick tour on some of the popular languages people use these days

Scratch is a very basic tool developed by MIT Labs to get kids interested in programing. It is incredibly easy and fun to use, it teaches some very important concepts of programing. Inside of it you won’t have to write or look at complicated code, instead you build you app as “lego blocks”. If you want to get a general feel of programing this is a very good tool for you.

Python simple language to get into, but can be really powerful. This is definitely my recommendation for beginners, who want to start writing code. Python community is really nice and will help you get started easily and help you in your future career. This is how a basic python program looks like — print(“hello world”). Great thing about Python is that you can start using it in your professional career, unlike Scratch.

HTML/CSS/JavaScript 3 beasts that power the web, from simple websites to powerful social media platforms like facebook, twitter, etc. Quite easy to learn and will be your best friend for a long time. Considering that web will become a dominant platform in near future, knowing this tech will take you a long way.

C/C++ this is quite complicated language and can prove difficult to grab hold of, but when mastered you can make your apps run really quick and efficient.

Java if you want to develop apps for Android phone this is your pick. Other than that, this language is slowly dying.

PHP you can learn this one just out of curiosity. It used to be quite a big language on the web, but these days people use it mostly because legacy software relies on it.

Programing language isn’t everything

You now have a basic knowledge on programing languages. You learned a bit of syntax and how it all works. You probably even managed to to create basic app. Next you’ve got to learn is something called algorithms and data structures. Basically you’ll learn many ways that computers can store data and the way they process it. This sounds complicated at first, but basic logical reasoning will help you understand them.

“Smart data structures and dumb code works a lot better than the
other way around” — Eric S. Raymond

When learning those things it’s important to understand general idea of how they work and situations to use them. Remember you can always google implementation details at any point, but you must know what exists to make your googling more efficient. You will be able to do programing work without them, but knowing data structures and algorithms can sometimes save you a lot of time and sanity.

You don’t have to go too in depth into it, just get some very basic feel of it. It will help you develop better and faster apps.

This Udacity course can be a good foundation for this.

Meet your new friend: Terminal

You know that little command line thing — black box, white letters, you type things into it and it does something… yeah that thing… You must know how to use it.

Why? I have this cool IDE (Integrated development environment), with fancy buttons, I click and things happen, why should I go back to the old ways of MS-DOS and UNIX where I have to manually type in commands?! First up Terminal will make you more efficient. Things are just easier there.

Let me give you an example. Let’s say you want to install Git on your computer. If you use the “normal” way you would have to go to official git website, find a button that says Download, click it, then wait for it to download, then click on installer, click “next” couple of times then wait again and only then you can finally use it! That was more that seven clicks!!!

If you would like to do, very same thing in terminal you would have to write this (if using Linux OS, other system have equivalents):

sudo apt-get instal git

That one command would download and install your application automatically.

Installing applications is not the only thing that is easier in Terminal, I suggest you try it out for yourself. There’s a learning curve to it, but once mastered it will save you time.

Use this tutorial to get you started

Ways of the Git

Another important tool that you must learn is Code Version control with git. This will be second most used tool in your arsenal (First being actual programming language). Git will enable you to easily track changes you make to your code and help you collaborate/share code with other developers in a friendly fashion. It does have a learning curve to it, but it is ABSOLUTELY necessary.

This quick tutorial will help you with that.

What direction to go?

Once you’ve learned a programing language (or couple) and familiarized yourself with basics of algorithms it’s time to choose, yet again.

In software development there are many fields that you can work in. Remember you can always jump between them and do whatever you feel, when picking one your not gonna commit yourself to it for the rest of your life. Also some of this information can get dated in couple of years!

Too be fair there are so too many fields to mention these are just the most popular right now. In each of the fields I’ll give a brief explanation of what you’ll do there (+ some of the roles, you can google what each of them mean yourself). Most of these fields can interconnect with each other. Here’s is a brief overview:

Game Development has to be the #1 thing people ask me about when they start programing. If you get into this field you can experiment with a lot of different things and you’ll always have a job. Game industry is incredibly large and was there since the beginning of personal computer revolution. Available roles include: Gameplay programer, Graphics programer, AI developer, Technical artist, Engine programer, Networking programer… (and many more)

Web Development in this one you’ll make web applications or websites. You’ll do a lot of things here. Your job may include just building a basic web interface, designing proper way to store user data, handle large amount of users. Basically as this type of developer you’ll build apps like Facebook, Twitter, Gmail, Medium… actually to many to name. Available roles: Front-end developer, Back-end developer, Full-Stack developer, UI/UX designer, Database Architect…

Mobile Development this one is a lot like web development, only instead of web platform you’ll work with android or iOS. Challenges are the same in many regards.

AI Developer you’ll be creating human like intelligence. This field is quite new and is still being deeply explored. In it you’ll be doing new kind of programing, where you tell machine how to learn, give it data and it will train on that data. Automatically extracting rules and making logical decisions of it’s own, unlike traditional programing where you give machine rules and then it just follows them. People refer to it also as Machine learning and deep learning. It is extremely popular right now and companies are actively integrating these technologies into their apps. Available roles: Computer Vision developer, Voice recognition developer, Data Scientist, Recommendation engine developer…

Practice!

One of the important parts of becoming a better programmer is to practice… That means you’ve got to write more code and improve your skills. Remember there’s gonna be a lot of competition, people who work in IT are complete nutters, they’ll code 9 to 5 at a job, then code again whole evening and night. For them it’s one of the things that drive their life, if you don’t keep up, it gonna get hard.

Welcome to the community

One of the best ways to improve your skills is GitHub. Github is a platform where people share their code and programs openly. This is one of the main platforms for Open Source driven development. What exactly is Open Source? Open Source is when underlaying code of the program is released publicly, so that anyone can look, modify and enhance your application.

Because all of the projects on github are open, that means you can find an app that you like and contribute to it. Good way to find an app to contribute to is either picking something you already use (just find a program from everyday life, it might be open source) or pick something that’s written on tech stack your most familiar with.

Github projects have some sort of To-Do list in them. You can look at that list and try to fix bugs and implement features related to the project. Then you can push those changes back to the repository, your code will be reviewed by project owners, they’ll recommend ways to clean it and then it’ll become part of the main project. You’ll get the necessary experience and they’ll get their code. Later you can put that into your resume.

When contributing to Open Source, you’ll understand the way professional apps are build. You’ll learn good practices on how to manage projects, write code and most importantly necessary experience. Not to mention you can meet some pretty cool people in software community this way.

Is it related to that git thing you’ve told me a little earlier? Yes! Absolutely! You’re required to know git to use github.

Learn to hack

“Good programmers know what to write. Great ones know what
to rewrite (and reuse)” — Eric S. Raymond

Let’s clean up your terminology. Hacker is not a person who robs banks, government organizations and so on. Hacking is a way to solve problems, kinda like design thinking. Read one of my articles for more info.

In industry we call a hack something that was cleverly thrown together. Maybe taking something that already exists, combining it with something else and getting a good solution to a problem.

This leads me to my next point — hackathons. Hackathons are events where a bunch of people come together and make software in 48 hours (or less). These events are great because you can meet cool people from industry, check if your ideas are viable, learn to write code quickly and more efficiently. At hackathons you can also learn new technologies and see if it something that you would use in day to day life. You will also learn how to properly pitch your idea to others and present yourself. This can also be an opportunity to work with people like you and check your team working abilities. I highly recommend that you attend such events.

Getting a job

Next logical step in your career is getting a job that pays. There are multiple ways to do that. You can either go as a contractor or get full time option at big companies.

Contractor work can be more accessible to newcomers. Here you set your own price, find people who need solutions and you’ll provide them. You can use sites like upwork to find jobs like these. Even better way to find freelance jobs is to ask your friends/relatives if they need something build. There are some desperate people who might need your services. At first I wouldn’t set a high price for yourself, maybe even start with free, but more you build your portfolio of projects, more you can raise the price tag. It’s very important to convince people that you can get this job done. Charisma and communication skills do matter in this industry.

When your portfolio and experience grows big enough recruiters from big IT companies will start to notice you and make offers. If they don’t you can always come directly to them.

If you want to get noticed I suggest you build up your GitHub profile, go to hackathons, make your own projects, grow your portfolio. It very important to be as public as possible and convince people that you’re the man for the job! Communication skills really matter here. You must know how to present yourself.

Learn to Fail

This is a very important skill to have! You must know how to Fail and ways to learn from your mistakes.

Iterative failure is as important as iterative success. Nothing ever goes according to plan… and that’s the plan!

The way to do it is different for each person, so find a way for yourself. I’m gonna give you a hard thought here, but you will fail at first! You must learn not to stop at that and continue, better yourself as a person!

Universal resources

StackOverflow if you ever find yourself stuck this is a site to find solutions for your problems.

Github again, this is a place where you can share code and collaborate with others. It’s like facebook of programing world.

HackerNews this is were you can find latest news in IT. One of the best places to keep in touch with world of technology.

Udacity learning platform offering very good courses on various software development topics

Cathedral and the bazaar this book will give a good idea on how software is made both in open source and closed source worlds. It will give you a glimpse on how hackers think. Generally this is a very inspiring book, I highly recommend you read it.

Closing word

Well, I think I’ve told you some basic info to get you started in large world of software development. This article was meant as a brief overview of industry for more concrete answers I suggest you use Google or just message me directly.

Thank you so much for reading till the end.

--

--