No matter where you are in your software development career or what technologies you work with, there are couple to things we all have in common:
- Education (Everyone needs to go for education but the nature of that education can differ.)
- Knowledge (the things we know)
- Skills (how we use the knowledge)
- Judgement (Choosing the right approach)
- The challenge is - There are always new platforms, new tools, new languages as our field is growing rapidly.
In case of any other profession, if you stop learning, things will still work. But in fields like software development and information technology, we need to make learning as our habit and a passion too as if you don’t do it, your skills will be less valuable in the IT market.
But wait!!! you can’t learn everything going on in the industry. One needs to develop a education strategy to move ahead and choose what to learn and what not to learn. This is a very important step one needs to make in this field for their career. So, let us figure out how can we move ahead.
We can move ahead to know about education strategy but think for a minute for the title that you are using for your career. There is a programmer software developer, software engineer, software architect, computer scientist, etc. These title are for the human resources of many organisations. Let us divide our community into two groups or titles: The Programmers and the Software Developers. A software developer may have the skill of a programmer or software architect or software scientist, etc.
If you ask a programmer to to write some code, you will get a quality code written if the programmer is confident with proper comments and following good practises. But if you ask a software developer to write some code, you will get questions like:
- How does it fit in the business process? Are the requirements thought out?
- Are you sure you understand what it will cost?
- What kind of documentation it will need?
- Many others…
Both has different approach to deliver some code. Programmers will write the code for a problem and software developers will deliver the solution by sometimes writing the code.
Languages Don’t Matter
- Programmers care about individual languages and
Software developers care about language characteristics:
- Strong or loose typing?
- Case sensitivity?
- Object oriented? Inheritance? Interfaces? Properties?
- Platform Integration?
- Interpreted, compiled, or something in between?
- Control Structures?
- Languages are secondary to platforms.
- Language doesn’t matter from a technical perspective, but it really do matters from a business perspective. If a business works with a language that is not liked by many there might be a huge risk or cost to find someone to support the systems in future.
A typical software life cycle cost can be like (may vary):
- Requirements and Design - 20% of the cost.
- Code and unit test - 10% of the cost.
- QA/deployment - 10% of the cost.
- Maintenance - 60% of the cost.
Keeping the above table in our mind if we compare language A and language B below:
- Language A - 50% reduction in coding costs, better tooling but not popular and hard to find develoeprs.
- Language B - very popular - developers are 50% cheaper.
Which one would you go for?
- From technical perspective, A is the better choice. But you should choose B, as it is good for long term cycle of your system.
There are some important points like software development life cycle, what to ask before starting a project, how to learn a computer language and just not use it to complete a project, etc. One can learn all this by having a good experience but a formal education in college and universities, a graduate is more close to become a software developer.
Going to college or university has many advantages. You might find yourself creating a network of friends which is another source of learning and enjoying! It also gives you credibility i.e. your education provider gives you a certificate at the end of your course that you have learned a particular module or subject and this will show to your future employers about your abilities. It is also common to not to join a college for a degree and start working directly in this industry but to have a better knowledge about this industry, one should attend a degree course from college or university.
Which School is Best?
For computer science at undergraduate level, they all teach the same thing. They use the same resources, text-books. So, choose the course wisely like don’t go to a college where they are teaching computer programming instead go for computer science. Employers are keen to know where you did your graduation from but in this industry this is not that important as once you get your first job, they only want to know what you did in your job. You should ignore the college rankings.
So, What does Matter?
- Go somewhere you like (culture and atmosphere)
- Look for Reasonable cost. (Fees for the course, living cost, etc)
- Consider the level of competition
- Location and Industry connections (As local organisations will be interested to invite students to join them or placement or internships, etc)
Building a Foundation
There are some facts that everyone needs to know and remember we all are in the same boat:
- You can’t know everything.
- You can’t keep up with what’s new.
What do you about it?
- Learn how to learn
- Learn what not to learn and where to stop
- Learn the fundamentals
- Learning on demand
The last two points above are very important. Say suppose you searching for a code sample to work with A and B as technology. You might find a code that works and you just use it by modifying some lines of code as per your need. But wait, this is the best time to learn about the fundamentals of those technologies or languages A and B. This will help you to learn about them and making your own solution. Also, if you practise this in your daily routine, you can be a just-in time programmer.
Where can you go to learn technologies? In college…? No, going back to college again is not the answer.
- Classes (schools or training companies) - but they might not be working in real environment to deliver production code.
- Documentation for those technologies are the best material to look at.
- Search (articles, blogs, forums and references)
- Forums in questions ans answers format.
- Create them for yourself - make your own notes, etc.
Breadth vs. Depth
- Breadth - build a foundation in multiple subject area
- Depth - specialise in targeted subjects as needed
- Don’t let your specialisation become your identity. As in our field, all technologies have a time frame and you might not find your specialised technology to be as good in the market as it was 8 years before.
If you are an employee, you management might have the preference to select a technology or if you are an consultant, your client might have the preference to do so. But it is important for you to decide, which technologies, you want to work with.
- The key is to look at the supply and demand.
- Try to pick the survivor.
- Don’t believe marketing hype.
- Don’t always follow the money.