learning – Yet Another Bug https://yetanotherbug.com A Lazy Documentary of my Projects and Thoughts Wed, 04 Jan 2017 00:53:28 +0000 en-US hourly 1 https://wordpress.org/?v=4.7.2 What programming language should I learn? https://yetanotherbug.com/what-programming-language-should-i-learn/ https://yetanotherbug.com/what-programming-language-should-i-learn/#comments Wed, 21 Oct 2015 02:43:10 +0000 http://yetanotherbug.com/?p=79 I want to learn programming because [I heard there is a lot of money in the field / it sounds fun / I want to make a video game / I want to make an app / I want to work for Google] (or whatever other reason…). What language should I learn first? This is a

The post What programming language should I learn? appeared first on Yet Another Bug.

]]>

I want to learn programming because [I heard there is a lot of money in the field / it sounds fun / I want to make a video game / I want to make an app / I want to work for Google] (or whatever other reason…). What language should I learn first?

This is a very common question but arguably the wrong one if your goal is to learn how to program. I know it doesn’t make sense but hear me out.

If you want to learn how to drive you wouldn’t ask should I learn to drive a pickup truck, a sedan or an 18-wheeler first? Each one has wheels, tires, seats, steering wheel, dashboard, etc… But they all have different driving styles and they handle in very different ways. They can all take you from point A to point B but they might have to go different ways and take different approaches as a sedan wouldn’t do well off-road and an 18-wheeler could not perform sharp turns in restricted spaces. Nonetheless you have to learn how to drive one or the other right? Then you could learn how to drive all the vehicles just learning one first and then the main differences between them… Well programming is very much the same thing. It’s true, most people start learning how to drive cars first and then move to “harder” vehicles or never learn anything else at all. But there are folks who started with go-karts or bikes first when they were younger and moved up from there… Are they better drivers? Not necessarily, that is just their personal path.

You will find some programmers saying “supercoolLanguage2000 is better than all the other languages combined!” or “EazyPeazy++ is the easiest language to pick up, start there!” but that would be like saying Russian is so much easier to learn than English and you should teach it to your kids first… Well if you live in the States chances are your kids will need English more than Russian, plus you’d probably not even know it (who are we kidding).

Yeah, blah blah blah… So what language should I learn? I came here for an answer dammit!

All right, I see… Then just press the following button and I will give you your answer so you can stop reading and start learning!


Now that we sifted out who is going to have a hard time learning how to code we can keep chatting about approaches…

The question “which one” starts from the complete lack of knowledge about what programming is. Obviously not knowing what you are going to do makes the task seem impossibly hard to achieve. That’s normal, and if it makes you feel better, it’s all in your head. Programming is as easy as writing this a post online… There is no insurmountable obstacle ahead of you, the hardest part is the first few steps, afterwards it’s downhill…

So a programming language is just like a real language. It has syntactic rules, grammar, short-hands, forms, etc. All languages (programming and natural) achieve the same result: communication. It can be between people, between machines or between people and machines. To speak to a Chinese person you should probably know Mandarin, to speak to a web browser you could use HTML.

Who do you want to speak to?

Chances are you have a general idea of what you want to achieve. If not, think about what excites you that is related to the technology world in one way or another. There are many ways you can go about figuring out what to start with at this point… I found this info-graphic pretty useful and entertaining:

which-programming-language-should-i-learn-first-infographic

In a more streamlined way…

I would love to make websites / Online tools:

That is awesome! That’s how I started… There are a few equally valid options but you need to understand some HTML to know how web pages are structured although that’s not a programming language per se  but rather a markup language (HyperText Markup Language) and some basic CSS (Cascade Style Sheet) that is what literally defines the “graphic style” of a web page.

There are a few different options to look into:

  • JavaScript 
    This is a powerful combo . To give you an idea, when you land on a website and things start moving around when you click or scroll… that’s JavaScript. When a bubble pops up telling you that your password is wrong, that’s probably JS as well. There even are browser games made with JavaScript and its many many frameworks.
  • Python ( + Django)
    Many say that Python is a very easy language to learn, but we decided not to focus on what’s easy or not for some people. Python is versatile. The basic language combined with different packages and frameworks can pretty much do anything, which does not mean it can do anything WELL. Each language has it’s strengths and weaknesses but if you want to make a website and you are also interested in expanding your knowledge towards other types of projects, Python will let you do that.
  • Ruby (on Rails)
    Same as above… Ruby is a fun language to use, less “rigid” than Python in its syntax (rules) but equally powerful and versatile. To develop website you’ll need it’s “on Rails” declination. Ruby on Rails is pretty much Python + Django. Just as Python, Ruby will allow you to extend your reach far beyond the simple web development.
  • PHP
    PHP was and still is (although losing some ground) the most popular development language for websites, however there are conflicting opinions about it. Many frown upon it because of its inconsistency in its rules and syntax. I might be (read am) bias because that is what I started with, but here is my 2 cents: it is true, PHP is literally all over the place, rules are different according to what feature you are using, what function you are using, how you are approaching your problems and 8/10 times you are likely to leave a vulnerability in your code… BUT… It includes so many concepts and styles that if you spend enough time on PHP you’ll find out that it has a little bit of something from every major programming language, thus giving you an idea of what you’ll find in a more formal language. You are free to disagree.

There are more options but these are the most popular.

I want to make apps for mobile phones:

This is a really cool field! With more and more powerful “smartphones” you can basically build anything you want to run on a mobile device! You can build a weather app (don’t build a weather app there are like 600,000 out there), you can build an app to track your child developmental milestones, you can make the next angry birds… the sky is the limit. So what do you start with?

  • Java (Android)
    Android is undoubtedly the most flexible of the mobile platform to develop with but “Android” is not a programming language, it is an Operating System that uses Java in its “apps”. So if you want to code apps for Android you need to learn Java. Cool thing is that Java is such a widespread programming language (used by 1 billion devices) that it can be literally used anywhere else. It is also not platform specific (can run on Windows, Mac, Linux, Android etc..) and this makes it extremely portable.
  • Objective-C
    If you are an Apple fan or you just want to develop applications for Apple devices you want to learn Objective-C.
    Ok, bias alert: I am not the biggest Apple fan so take this with a grain of salt. Objective-C is a painful language. Its syntax is not found in almost any other (modern) languages. It is outdated and even Apple is stepping away from it gradually… BUT… 90% of apple software is built in Objective-C, so draw your conclusions.
  • Swift
    Apple realized that Obj-C is as pleasant to use as a bike without a saddle so they came up with Swift, a language inspired by all the most successful modern languages like Python, Ruby and (to some degree) Java and C++. Swift is compatible with Obj-C code so that old snippets could technically be dropped in painlessly into the new code, although it’s still an hazardous move in my opinion. If you want to approach Apple development (iOS and OSX) in a more modern way then Swift is your best option.

I want to make video games:

All right cool. One option is to start with a language specific framework:

  • Python (+ PyGame) 
    The concept is the same as with Django… PyGame is a set of tools that allows you to create your game using Python. It is well documented and quite powerful!
  • Java
    Like we said Java is a very popular language and it has a ton of game frameworks that can be used to create cool games. You just need to grab one and start learning.

If you want to get some polished results fast then your best bet is to start with a Game Creation System which will allow you to put something on your screen quickly giving you that fuzzy feeling of reward to push you to learn more and more… Nothing like a ball bouncing between 2 sticks to keep you going… You have a couple choices I would start with:

  • Game Maker: Studio
    GMS allows you to create really awesome 2D games fast. It uses a proprietary language GSL (Game Studio Language) for scripting that is inspired by other mainstream languages such as C++. GMS allows you to port your games to any platforms from PC to Mac to mobile devices which is a huge plus.
  • Unity3D
    This is a heavyweight professional Game Creation System and Engine. Just like Game Maker: Studio it allows cross platform development but it supports both 2D and 3D graphics. It uses C#, Java and Boo (either one) as programming languages and although feature-rich is well documented.
  • Unreal Engine 4
    If you have ever played video games then you know what the Unreal Engine is… This is a very powerful game engine that supports cross platform development and just like Unity it is very versatile. It uses C++ for scripting and it’s very feature rich.

As usual there are other ways to go about it but these will guide you into learning what is necessary to reach your goals.

In summary, learning a programming language is not any more difficult than learning anything else. We learn things every day, especially when they interest us or excite us… So get excited about a project and learn as much as you can!

I’d suggest you start with some online video tutorials… They are my favorite way of learning new languages… I like to listen and see what people who are already proficient in the language do. It’s almost like a one on one tutoring and it gives you the chance to follow along.

Some of my favorite sources (in no particular order) are:

  • The New Boston
    Free and with an extensive collection of tutorials… It also doubles as a social network for programmers so it’s easy to find help.
  • Udacity
    Lots of professional courses some free some available for a monthly subscription.
  • Udemy 
    Tens of thousands of courses sold individually… Look for coupons online!

 

The post What programming language should I learn? appeared first on Yet Another Bug.

]]>
https://yetanotherbug.com/what-programming-language-should-i-learn/feed/ 3
Solve your problems (and learn something while you are at it) https://yetanotherbug.com/solve-your-problems-and-learn-something-while-you-are-at-it/ https://yetanotherbug.com/solve-your-problems-and-learn-something-while-you-are-at-it/#respond Wed, 27 May 2015 23:36:56 +0000 http://yetanotherbug.com/?p=26 A few weeks ago I came across this video… When I was a kid I loved playing with LEGO blocks, building stuff out of cardboard, scotch tape and toothpicks… I always found rewarding making something out of nothing and I got to have new toys every day! My mother has always drawn and painted and

The post Solve your problems (and learn something while you are at it) appeared first on Yet Another Bug.

]]>
A few weeks ago I came across this video…

When I was a kid I loved playing with LEGO blocks, building stuff out of cardboard, scotch tape and toothpicks… I always found rewarding making something out of nothing and I got to have new toys every day! My mother has always drawn and painted and her influence inspired me to become a graphic designer, but the passion for building things, not just drawing them on paper, never left me. I could have become an engineer, but I was awful at math. Eventually the World Wide Web took over our life and I quickly realized that the future was online so I started designing for the web. When HTML was king my job was still mainly that of a designer although it became quickly clear that just using Photoshop or Illustrator wasn’t going to be enough and so I learned PHP. First just some small functions to display HTML and then more complex stuff involving MySQL databases and a more dynamic approach to the development of websites… Javascript and jQuery followed pretty quickly as the demise of Flash came upon the web.

I did not have a plan to learn any of the stuff I learned and I did not know what I needed to learn I just had goals and tasks to accomplish (and problems to solve) and, of course, I had access to the internet. At first I was happy just copy/pasting some snippets from other developers and maybe just modifying them enough to roughly fit my needs, but the thrill of building out of nothing was there again and I could feel it.

Learning how to code has been for me almost like learning how to draw, first copying other drawings, then real subjects and finally just drawing without a subject… The syntax became quickly familiar and things started to click. I did not have any formal training but the common practices and patterns became obvious and I started using them without knowing it. So as the good Kevin said in his video, I had a problem and I solved it, again and again… And from web designer I became web developer.

pokemon_evolution

The evolution has been unstoppable…

At first I was worried, I’ve always being kind of a perfectionist in my work and not having a formal education in computer science I felt always one step behind other developers. I did not feel “qualified” enough for some of the projects my clients asked me to do and I ended up hiring third party companies to outsource the bulk of the jobs. The results were a total disaster. The projects were always late and way below my standards… I had no choice but go back to my old ways, look at the final code, understand it, (loathe it,) modify it, and deliver a limping, placeholder product. Then go back and start from scratch redeveloping the whole project by myself. If anything that gave me the confidence that only comes from seeing what a crappy job other people are doing and that it’s going to be hard to be worst.

Of course there are so many professionals that are much much smarter, more knowledgeable and clever  than me and they are the people I always try to learn from!

I totally agree with Kevin, education is very important, but at the end of the day what we do as developers is solving problems.

The post Solve your problems (and learn something while you are at it) appeared first on Yet Another Bug.

]]>
https://yetanotherbug.com/solve-your-problems-and-learn-something-while-you-are-at-it/feed/ 0