Currently programming have three main perspectives, it is seen as art, as craftsmanship and engineering. No matter how structured and hard is your development process, you need to be creative as an artist, and detail oriented as a craftsman. Software engineering just defines the development process, and there are many components related to Computer Science that are being used by the engineering process and programming tasks. No matter what is your perspective regarding programming, the fact is that you are stuck in the marketplace, and you will not work on the projects that you like if you have a low work performance.
Learning new languages in some manner can free you from getting stuck in the market, opening more possibilities of getting interesting projects in your career. Take a look on the top language requirements along the time.
Which languages can bring you more freedom?, freedom spreading the types of jobs that you can handle by learning them. The most used programming paradigms can help you. The top one — as everyone knows — is object oriented programming, other two paradigms that can bring you the proper knowledge to get better a job position are the functional and the procedural paradigms. Due to the procedural origin of the object oriented programming paradigm, learning procedural languages will bring the best structured programming approach, with the special scope of implementing algorithms, rather than using an ORM to store data on any storage that your customer wants to use. With the functional paradigm, you will learn abstractions that are present on many object oriented languages today, like lambda expressions, closures, continuations and similar ones. If you learn from all those paradigms, you will be able to produce code with better quality and understand concepts that will bring you a wider perspective of programming. So, learn at least one language for each programming paradigm.
I think that programming is hard. But I mean real programming activities. Be a little bit honest with you and ask yourself how many times do you have implemented algorithms different from inserting and extracting data from a data storage? You will not have a chance of doing different things than doing business applications if your skills are limited to framework application and usage. There is a nice article describing the fact that I meant: Don’t Call Yourself A Programmer, And Other Career Advice. So probably you are not really programming in your current job position. On a private mailing list I asked how important is real and proof awarded experience, like working on FOSS projects and having something to show, among other job position requirements like certifications.
If you want to be treated as “resource”, search a job position based certifications. My conclusion: If you want to be treated as programmer, half-artist, half-craftsman, half-scientist and quite-individual, search a job position based on real experience. [GW, a feedback that I liked].
But remember that you are just making business value. So, do not expect that your willing of a company that seeks your artistic approach of creative programmer will hire you to do only the stuff that you want. So, probably you are just gluing routines from a framework, like JavaEE or .NET driven applications, or simply doing a PHP5 framework based application.
I want to make things, not just glue things together. When people ask me what I like about my job, I always say the same thing: that its the thrill of starting with nothing and making something. That, for me, is the essence of programming, and it hurts that there isn’t as much of it about as there used to be. [Mike Taylor, “Whatever happened to programming?”].
With the same erroneous approach, you will see along your career many hybrid systems which are holding very different software components. For example I have seen sites that are mixing WordPress, Joomla, and custom libraries to meet the customer requirements, rather than doing a well architected application based on a well known framework which lead you to a real solution. Those programmers or software engineers are not programming, they are just gluing everything that can solve small problems and creating one big problem and well known problem between software architects: strongly coupled applications with a strong lack of system design.
But even you must not make your choice only because something is cool. Usually new technologies or emerging technologies, are subject of bugs, lack of a consistent community, and enterprise support. So, each time that you choose a technology, you must think on its scope. That is why you are stuck in the market. Most companies are preferring those technologies that are widely supported by the market. Those technologies that have certifications, support that is sold by big companies, well known names and related stuff. That is why you are just a resource, a mere worker with high-tech knowledge and a quickly replaceable piece because the market offers that. But be honest, how quickly can your company replace you?, is that real the fact that everyone is good in programming as you are? Take care about what you learn.
When it comes to selecting tools and technologies, again, balance is key. An unbalanced developer selects technologies simply because they’re new and exciting, or rejects them simply because they’re unknown and unproven. A balanced developer evaluates new technologies on their own merits, weighing gains in functionality against the inherent risks. [David Eisinger, “The Balanced Developer”].
Start your own project or get some participation in some FOSS project. You will know more people with similar interests and probably you will learn more stuff for your most loved technology, allowing you to work exactly where you want and working on those projects that you like. The bigger is the market support for certain technology, the biggest chance you have to get a job position on that technology, because it is more used. The classic example is Java, there are many software engineers that can work with it, it has well known certifications and it offers products on the market that are subject of supporting companies, so it is well paid. At the other side you have PHP, with many people that offers PHP based services, with a large amount of companies offering services related to it and decreasing the value of PHP projects. How many companies that are offering PHP can provide you a well architected application based on well known standards, like design patterns and well applied architectural patterns?
Once you’ve got something working, then build a series of improved versions. Don’t create pressure by making a version suitable for public distribution, just take a long look at the existing application, and make it better. Can I build an HTML 5 front end to my photo tagger? [James Hague, Advice to Aimless, Excited Programmers].
You should seek a balance between what can you do and what you really want. If you want to develop computer games, start learning geometry, the proper maths, computer graphics theory, parallel programming and related stuff. Do not stay freeze on the desire, just do it, but do it well. Introduce some hacks on a widely used FOSS game that requires that knowledge and start showing your skills, you will get more chances of getting a real programming job related to computer games. But remember that you are not the only one.
90% of programming jobs are in creating Line of Business software: Economics 101: the price for anything (including you) is a function of the supply of it and demand for it. [Patrick, Don’t Call Yourself A Programmer, And Other Career Advice].
Do not expect something from your job which it is not. When I was working for “Big Companies”, my code was subject of normative that I really hated. For example — and curiously this one was very strict — the ternary operator was prohibited due to its complexity to be read. What is the ternary operator?, it comes from the C programming language, and it is a kind of shortcut for if/else statements for lvalue assignment. As the example bellow, it can do the replacement of the complete if/else structure by few lines of code.
/* standard if */ if (isAvailable()) { result = doSomethingCool(); } else { result = cantDoSomethingCool(); } /* ternary operator */ result = isAvailable() ? doSomethingCool() : cantDoSomethingCool();
For that company was cheaper to contract low rate programmers with some lack of knowledge interpreting the ternary operator, rather than implementing routines using the ternary with good programmers, good enough to understand that simple operator. The market has its rules, and improvements do not comes from things that are cool, instead they come from everything that can make things cheaper. I cannot imagine that kind of programmer which cannot understand the ternary operator concept trying to understand the Monad abstraction in functional programming.
Engineers are hired to create business value, not to program things: Businesses do things for irrational and political reasons all the time (see below), but in the main they converge on doing things which increase revenue or reduce costs. Status in well-run businesses generally is awarded to people who successfully take credit for doing one of these things. [Patrick, Don’t Call Yourself A Programmer, And Other Career Advice]
I have started my work as freelancer seeking more freedom. I want to do cool stuff and be free to use whatever I am skilled to use. I have left behind some technologies because I have that kind of restrictions using them, I do not want to work with programmers that are not able to understand programming concepts and even with that kind of boss that seeks cheaper programmers rather than seeking good programmers.
Nice post! Thanks Daniel! :)
So excited I found this article as it made tighns much quicker!
Buеn Poѕt
Me gustó lа manera en que relаta sobre el tema.
Continuaré volviendo esta página pаrа
continuаr аprendiendo sobre el tema.
Gгacias