The Last Guide You'll Need: How to start your journey into programming!



*Deep Breath* So, after seeing all the memes, listening to all your programmer friends going on and on about the 'dark side', that is programming, you decided to venture into the dark side too...

However, there's one small problem, now that you're here, it's probably 'cause you're not sure how to start the journey. I mean, look around, there's so many languages, frameworks, technologies and what not, each with it's own cheeky name and logo, which don't really seem to help you choose.


Now, you may have found yourself googling "C vs Java" or "HTML vs C" (as funny as the latter is...), and found yourself in the midst of a holy war of sorts between fan boys defending their path to the dark side err language and bashing on others. While some points they've to offer do make sense, but not all. Like say, "C can run this code 2ms faster than Java can" while another says "But C can't run on all platforms like Java can". Through such arguments, you get info sure, but you've to sit through for hours trying to wrap your head around all the hate and toxicity. This complexity is what makes most coders give up and declare coding is not their cup of tea.




I get asked the same quite a lot too, be it "C vs C++" or "MySQL or NoSQL" (NoSQL is actually a thing, no it doesn't mean not using SQL FYI 😛). All these questions are quite difficult to answer without getting into raw specs like speed or computational complexity, which is not useful when a person has no CS background to wrap his head around things like time complexity or memory management.

Rather, here's what I usually do, and what I encourage you to think of as well...
What do you want to build ?
 Is it a website ? An Android app ? One for ios ? A simple command line application ? Or just have fun tinkering with say Machine Learning or Math...

All of programming can be broken down to 3 main platforms:

  1. Web (websites like Google, Facebook, Twitter, Google+(RIP))
  2. Desktop (applications like Notepad, Microsoft Word, Photoshop, and even games like GTA V...)
  3. Mobile (Android, iOS, Windows Phone(RIP)) (apps like snapchat, instagram, whatsapp)
Most websites or apps we use have offerings on all 3 platforms, say Google, which is available on the web as Google.com, on desktop as Google's Desktop App on the Windows Store, and on mobile as the Google App. You can start of by building one though, and then move on to build for the remaining platforms.


Knowing what you want to build is more important than knowing a language, and not knowing what to do. It's like you just started taking cooking classes, not knowing what you want to make, and then ending up with a few very hard to make recipes, so insta noodles it is! Also, I feel that when you wanna' build something, you'll not lose heart easily and give up. Programming needs loads of dedication as you grow. And things will get complex real quick, urging you to rather give up and move into the McDonalds down the alley.


Now, once you're back from your vision quest to build the 'next big thing!', (it could be a simple to-do app too by the way...). You need to write down about what you're going to need to build the Death Star and take over the galaxy.. 

Don't worry, we'll not be putting out any MBA101 charts here, just a simple list.. 



The list has to be something like this:
Things I need to build my project:
  • A website 
  •  A mobile app 
  •  A desktop app
Good job! You've cleared the first step! Now, this makes things easier, as you can learn just the stuff you need to build your website or mobile app, down below I'll be discussing about the most popular options available to you, if you wanna build something...

Web Development

Now the Web as we know it can be broken down into 2 things:

  1. Front-end
  2. Back-end

Front-End

Front-end is all about the look and feel, the stuff your user sees when he opens your website, be it on a phone, PC or tablet. So you guessed it, it's about user interface design mostly. You know, the buttons, text boxes and all. This is like necessary for almost every application, across all platforms, and the experience you get here helps you design user interfaces on other platforms too!

The staple for front-end development is HTML (Just puts the stuff together), CSS (Adds beauty), JavaScript (Here's where the action happens). 

Here's what CSS done rightly can do to your websites...


CSS let's you add your own personal touch to your website, wanted rounded corners ? Sure! Want transparent buttons ? Sure. You can design anything out of CSS when you're good at it. You can establish your own brand's image through design of your products, here the website. You know like Apple!



Coming to JavaScript, it lets you do a lot, if your website was a human say, the HTML would be the skeleton, you know keeping it together and giving it's basic shape, the CSS would be your flesh and all that give you your looks. The JavaScript is what would be your brain. 

JavaScript will let you do anything, you can make a button change colors when pressed, or display messages, add timers, counters, make basic games, you name it!

Now, these 3 have been around for ages, and starting to build your site from scratch is quite the drag, so it's best to base it off of a 'template' these contain pre-written JavaScript and CSS files, that you can drop into your project and get started real quick, some examples are:
There's many more out there, these are some of the few that I've used personally and like a lot! It helps you end the guess work of what appeals to others and build on. Or take things apart and build on by yourself too...

Coming to Javascript, we've loads of frameworks, which handle again, the CSS and JS, making even more richer User Experiences, some examples include:
Note: Bootstrap and the above mentioned libraries can also be classified as frameworks for building out front ends, but React and Angular are a completely different breed, and I'll cover these in a post coming in the future. In a nutshell, frameworks like React allow you to build what are essentially called "webapps", so your pages can do a whole lot more, that would make the user wonder if it's really a website if you were to hide the borders of the browser displaying it.
Again, there's many more, but these are the ones I've used, and like personally and find easier to get started with, you can always google alternatives for these once you've a basic idea of how stuff works.

What you chose to work with depends on your taste, and your audience you're trying to reach, I personally love Google's Material Design , you know the design of Android's UI. So I use that, if you like how Facebook and Instagram look, go with ReactJs. It's totally up to you. 


As you expand your functionality, you'll need more stuff like:
  • JSON (Basically let's you store data in a hierarchical, structured fashion)
  • AJAX (It's a JS library that let's you send requests over the web)
  • XML (Very similar to HTML, used to store structured data)
While not everyone would need these, but they do help and I encourage reading about them atleast to know when to need them. 

JSON is useful to pass on data from back-end to front-end. AJAX lets you get info from a website without reloading. And XML is kinda' like JSON, but with it's own advantages and disadvantages.

Back-End

When you say back-end, you usually hear PHP, ASP.NET, Node.js. In my HTML, CSS and JS being your body analogy, if you were to stuff in Back-end, it'd be something like your brain, but more of your conscience, memory and all. Back-end involves stuff like Databases, you know memory...

Back-ends are what keep your website together and functioning, each time I navigate through the different pages on wikipedia, the back-end directs me to the page I need to go to, by seeing what I'm requesting and sending the response. All this magic is essential for a website. And well these back-ends can and will connect to mobile apps and desktop apps too, so this stuff is totally reusable.

Now back-ends take my queries, and send responses, handles databases and what not, and there's a huge catalog of languages when it comes to that, so let's break them down. 



Generally speaking, for all the queries and you know site navigation work, like uploading documents, downloading stuff, posting stuff etc. You can pick one of the few given below:
Node.js is the newest among the three, and I'd highly recommend it as that's much more popular now and has like a truck load of features. I prefer it personally.


Now, here's some extra ones, that you might not have heard of, but I've used and liked:
These are written in python, and play well with python, so running your python scripts is smooth, so imagine this, you can have the user upload an image, and on your back-end, a python file is executed, and the image is classified and the user gets the result. This is smooth and end-to-end. I prefer these for writing out APIs. 

APIs are basically pure back-end implementations, they have no front-end of their own broadly speaking, like in my example with the image classification, different websites could send requests to my server and I could serve them the results, think of it as a service. You might've heard of APIs before, like say the Twitter or Google Maps API. Your API has to be sleek and fast, it has to do a lot of lifting soon, as a slow API can lead to slow user experience, same with back-ends...


Databases

Now coming to databases, everyone's nightmare, it has to be fast, secure and what not! So a database, simply put is where all data is stored, be it emails, passwords or your credit card info, so naturally it has to be secure and fast to access at the same time. To add, delete or modify data in a database, we use what's called a 'query language', SQL, and there's different flavors of SQL, kinda' reminds you of all those JavaScript frameworks... Here's the different flavors:
So, here's how you make the leap right... So first, you've gotta decide the kind of data you'd be storing. Is it relational ? Relational meaning, would the data from one table be related to another, they're 'related'. Then it's MySQL for you, else if your data requirements are fast and ever changing, go for NoSQL. 

Now, if you're a tinkerer and don't want to run a server to host your databases, remember all SQL flavors except SQLite run as servers, which is a bit of a pain for prototyping. Then go for SQLite, which as the name suggests is lite and simple to use.


All these problems, scaling, managing are solved by choosing wisely. So research well before you go with something. Always try SQLite and see how well stuff fits to get an idea. And then chose what you want for the real deal.

For more database stuff stay tuned for a future post covering Mongodb (NoSQL databases) that is basically JSON on steroids!

Desktop

This is where my journey as a coder started, and this is where I dwell! When it comes to desktops, we've languages like C, C++, Java, C# and what not.

Here's a simple rule of thumb I follow when I need to build something:
  • If I want to build a prototype (need not be perfect code with memory management and run time optimizations.) I go with C#, Java and Python. We'll discuss more about which to pick soon!
  • If it I want to build something that has to run perfectly, you know impress everyone you know, then I'd go with C or C++ depending on how comfortable I'm with them. Both of them are very powerful in the right hands, and widely used for such tasks. Python is no less though, but it loses in the performance division
  • If I want the application to run on all platforms, say MacOS, Linux and Windows, I'll use Java, it's easy to write applications with decent user interfaces, that'll run anywhere. Useful for simple projects. 
  • If I'm going to develop stuff for the Windows Store (For Xbox, Windows 10, Mobile(RIP), Holo lens, Hub) I'd go with C# as I can run the same code on all of these at once with UWP.
  • You can code beautiful interfaces with WPF and UWP if you're good with a language called XAML, which is like HTML, CSS, JS replacement for windows apps. It's fun, I really love the flexibility it offers.
C# and Java are very similar in terms of syntax structure and overall features offered, if you know one well, you can pick up the other in no time. And they really help take over the Desktop real fast.

You can always plug your desktop apps to communicate with your back-ends to add even more features you can't support natively on the PC.

You can even build games with C# using Unity. Both Java and C# let you build apps for Android, with almost the same codebase. C# takes it a step further and lets you share the same code between Android, iOS and Windows Mobile using Xamarin. I've used Xamarin before, and it's light years ahead of Android Studio.



Mobile

As mentioned above, you can totally use C# to build apps for both Android and iOS with the same codebase using Xamarin. Something I totally prefer over Android Studio using Java. 

Let's break it down OS wise:

Android

  • Java using Android Studio
  • C# using Xamarin
  • Kotlin using Android Studio
  • Dart (for Flutter)
  • React Native (Java

iOS

  • C# using Xamarin
  • Swift on Xcode
  • Dart (for Flutter)

Windows Mobile

  • C# using Xamarin or even UWP

Then there's other platforms that come under mobile like Apple's WatchOS, Android wear, TV and so on, most of which share the same workflow as those mentioned above.

As always, you can totally connect your mobile apps to a server back-end to get even more horsepower and functionality that the platform may not even support. Like say running a pi digit calculator on a poor iPhone 4 which'd die in a while. Good luck with AWS bills though.



Some cool new tips to write less code for apps

If you're a web wizard, then checkout electron. It lets you build cross-platform apps for desktop using web technologies like HTML, CSS, Java Script and Node.js.

Xamarin is a cool way to produce mobile apps fast using C#, as you can essentially have the same code base run on Windows Mobile, Android and iOS.

Now React Native and Flutter are quite similar when you start working on them, speaking purely in the approach point of view. They both utilize what is called the "Reactive Design" principle, that is different from MVC (Model View Controller), long story short, these 2 are amazing and light years ahead of anything else out there right now (As long as you don't want to build separate dedicated apps in the native language of the platform). I've personally worked on React Native and Flutter and can assure you that they both need a little bit of effort upfront, especially with Flutter as you need to learn Dart (A very Java-esque language), but the investment is totally worth it. And you get to build fast with little to no compromises in performance and functionality compared to a Native app for the platform (AKA a Java App for Android and a Swift app for iOS).

Coming to web developers again, Google has something called Progressive Web Apps (PWAs) , that let you turn your website into a native app for any platform, with a lot of functionality which makes them act just like apps on your phone. This is where frameworks like ReactJS and AngularJS come into play.  

PWAs are the most promising ones among the bunch, and the results are darkly promising...



Computer Science

Now, at some point, you've to learn stuff like algorithms, data structures and system design. Although they're not need right of the bat, they'll help you write better code as you move towards production. 

You'll need to learn:
  • Algorithms
  • Data Structures
  • System Design

References

So how do I learn all this ? Should I sign up for a degree ? 


Please don't! Most colleges teach you outdated stuff anyway, and you'll lose a lot of money and time. If you don't like something, you can't just switch like you can if you learn by yourself, there's greater flexibility and room to grow. And let's face it no pesky exams to mug up for. So here's some resources I use to learn stuff:
Now, with this guide in hand, your path to the Dark Side is all set...


Comments

  1. I am happy to find this post Very useful for me, as it contains lot of information

    Education
    Technology

    ReplyDelete
  2. Thanks for sharing valuable information
    More details Visit: https://nearlearn.com/react-js-training-in-bangalore-india

    ReplyDelete
  3. Thanks for sharing knowledge,
    More Information: https://nearlearn.com/react-js-training-in-bangalore-india

    ReplyDelete
  4. Here i had read the content you had posted. It is much interesting so please keep update like this.Full Stack Online Training

    ReplyDelete
  5. I am new in this area and doing my internship from
    reactjs web development company I was little bit confused in programming area. Thanks for sharing this information related to programming methods and tricks for upcoming challenges.

    ReplyDelete
  6. I really appreciate your articles im a daily reader of your articles i love your informative tips and paragraph which are rich of useful knowledge thanks for sharing
    Android app developer in bangalore|
    |Android App Development Company Bangalore|
    |UX Design Companies In Bangalore|
    |Android app development company in bangalore
    |UI UX Design Companies In Bangalore |

    ReplyDelete
  7. Thanks for your great posts.We are the leading digital marketing company in dubai .Hire our digital marketing agency in dubai today for digital marketing services in dubai

    ReplyDelete
  8. Excellent article and this helps to enhance your knowledge regarding new things. Waiting for more updates.
    Angular 11 New Features
    Versions Of Angular

    ReplyDelete
  9. Nice information Thank you for sharing Such type of Information With us. We are the Digital Marketing Services in surat.

    ReplyDelete
  10. Visit CMOLDS a web development agency dubai offering and providing complete services in this web and app domain.

    ReplyDelete

Post a Comment

Popular Posts