With the growth of elitism and fanboyism in software development world, as well as many questions I noticed all over the web showing fundamental misunderstanding about this topic, I felt the urge to write this article. You’re free to contribute, fix mistakes and add your own opinions. Goal of this article is to answer the most frequently asked questions about software development.
You’re completely free to share this article or parts of them as long as you share the source too. I will occasionally update it with new questions and answers. Questions have quite mixed up order, but I hope you'll be able to find the answers you need. I will try to organize them better in the future.
Initial version of this article was written on Quora so you will see few links to the answers from Quora.
Any decent computer will do the job.
In my opinion, your first language should be:
- easy to learn
- have a strong community so you can get your answers easily
- a language with many jobs available to you
It depends on your field of work. For most of the things (web, desktop and mobile development), strong math background is not required. Exceptions are game development (but you can develop simple games without strong math knowledge), machine learning, data science, cryptography etc. Even then you will most probably need knowledge in some specific fields of math.
No. This is one of those annoying polemics where some people love to think highly of themselves because they use certain tools in development. Use whatever allows you to write applications. It doesn’t matter if it’s Sublime, Atom, TextMate, Vim, Emacs or anything else capable of editing source code.
This is, of course, exception for platform-specific developers; for example, if you’re developing for Windows it’s recommended to be familiar with Visual Studio and, if you developer for iOS / Mac, it’s recommended to be familiar with XCode (and most of the time, you have no other choices). For everything else, it doesn’t really matter.
Finding a first job in the industry can be quite hard. Don't worry though - finding a job is easier than it was in the past.
The first thing you should do after graduation (if you haven't already) is to build a good portfolio. No one will expect it to be amazing so it's enough for you to have few projects you can show you to the potential employers.
If you don't have any idea, here are some nice lists of project ideas you can try to implement:
- A list of practical projects that anyone can solve in any programming language
- A collection of application ideas which can be used to improve your coding skills
- A curated list of project-based tutorials
Post your projects on the GitHub and attach the link to your GitHub profile in your CV. Google for the software development job boards in your country and look for the internships or the junior developer jobs. Don't worry if you don't know all the things listed on the job post. Be persistent and eventually you'll land the job.
No. Right now we’re in 2020, not in 1995. JVM is developed by some really badass software engineers who know what they’re doing much better than those who call languages slow. If your application is slow, shame on you, it’s not the problem of Java (or you’re trying to do something for which Java isn’t made for, like, developing OS in Java, which, again, is not the problem of Java itself).
It looks like it’s dying last 22 years. It’s kinda hard to kill someone who owns the top place for decades.
This is like asking what’s the best tool ever. Seriously, do you really think that hammer is better than a screwdriver or a saw? Same thing with languages.
If language X is suitable for your project, use it. If you don’t know it, see if there are other languages suitable for your project which you already know.
In case you find the more suitable language you already know, use it. If there is no such language, learn one which is suitable for your project.
If there is need for developers to maintain projects written in X programming language, that language is not dead. Cobol was invented almost sixty years ago and it’s still relevant and used by many institutions (this doesn't mean it's a good idea to learn it today though).
First, you haven’t learned A programming language. There is no way for someone to completely learn any programming language. Even if you managed to remember all of it’s keywords and the whole standard library, you still haven’t learned it.
No one cares how many programming languages do you know. As I already said in one of my previous points, languages are tools. It’s what you make with them which matters. Good engineer knows which tools are suitable for certain jobs and which aren’t.
Stop learning languages and start writing apps.
It doesn’t really matter, except if you develop platform-specific apps. If you want to develop apps for platform X, it’s the best choice to actually do it on platform X. For iOS, it’s best to develop apps for it on macOS as primary development tool, XCode, is made for it. If platform X is Android, it doesn’t matter because ADK is available for all of these platforms (apply the same pattern for all other platforms). In other cases, it doesn’t really matter.
If you're a web developer, knowing Linux will be quite beneficial, as most web servers today use it. Don't worry if you never used it before. It's possible to play with Linux without actually installing it on the hardware (feature known as Live CD). The only thing you need is a USB stick and an ISO image of the distribution you want to try (Ubuntu will be easiest).
It depends on your schedule (if you have any). There’s no definite answer for this - you should find some balance, but as it’s true with almost anything else, the more time you spend learning and practicing, the more things you will learn.
However, don’t forget that brain needs the rest too. The best way to learn new things is to practice them so, once you're finished with the basics, try to make some small projects in that language.
Because rewriting whole applications in other language is:
- time consuming
- introduces possibility of new bugs
Rewriting application in another language is almost always a wrong choice. Check this article by Joel Spolsky.
Linus Torvalds said that C++ is crap, it must be true because he wrote such a big project as Linux, right?
Nope. Linus is human being and human beings, because of their imperfect nature, have their prejudices.
Check out this article: A response to Linus Torvalds on C++.
It depends on your experience. If programming language X is, for example, Haskell, which is pure functional language, and you had prior experience only with imperative languages only, you’ll have to learn completely new paradigm, not just the new language.
Learning programming languages is easy, it’s writing software which is actually hard and needs much more effort.
For some jobs, having degree in computer science will be necessary.
If you have a change to get a degree, go for it. If you don't, focus more on building your portfolio.
To become a great programmer, you should have good analytical skills and know how to find the best possible way to accomplish the goal in a limited time period. There is no definite answer to this question but in my opinion, you should become familiar with this topics:
- Algorithms - you don’t have to memorize them all, but you should get the idea when particular algorithm is the most suitable for your problem. You’ll learn how to implement basic once as you progress in your career.
- Data Structures - you should learn their memory and time complexity and again, when particular data structure is suitable for storing certain information.
- Object-oriented Programming - it’s the most important paradigm today and knowing it is mandatory.
- Object-oriented Design Patterns - if you want to further advance your knowledge of OOP (as you should), design patterns are the next station for you. Again, you don’t have to memorize them but to know when certain design pattern is a good choice for organizing part of the code base.
- Software Documentation - documenting your code helps you and your colleagues to better understand code base. By writing it, you’ll be thankful to yourself after few months / years as you’ll be much more able to understand what you wrote than if you left just code, without explaining what it does.
- Testing - it’s often told that project which has no tests is not complete (and I mostly agree with this). By writing unit tests, you ensure that your code base is stable and ready to be extended without disastrous consequences.
You should also learn how to write clean and organized code. For this topic, I recommend a book Clean Code by Robert Cecil Martin.
This article was originally published here.