web developer & system programmer

coder . cl

ramblings and thoughts on programming...


where can I work?

published: 24-02-2012 / updated: 24-02-2012
posted in: development, programming, projects, tips
by Daniel Molina Wegener

Passionate programmers are always seeking a good place to work, with good and nice programming languages and very good expectations. «Where can I work?» Is one the biggest questions that someone can ask to himself. There are big companies almost everywhere, great corporations where you can build up your career. But you should be able — as developer — to see your environment. Big companies, like retail ones, are not hiring developers directly, with some big exceptions like Amazon, but it is a foreign company, so most of those big companies are using outsourcing and externalizing their development services.

There are various types of companies, I think that the biggest market is owned by outsourcing companies. But on outsourcing companies you will not grow enough to reach a management position or software architect position, because those companies using outsourcing services have their own architects and managers. Probably you can grow at least as lead developer, but usually those big companies using outsourcing services will not offer any stable position to you due to the contract that was signed by both parts of the sold service.

On that kind of companies, the fact that their programming language usage is restricted only to those languages supported by other well known companies, so that number languages is very limited, and probably you will only find Java, C# NET, Visual Basic NET, ABAP4, Cobol, and on very strange cases standard C under POSIX or SUSv2/3 platforms. Big corporations do no like those languages that are considered academic like OCaml or Haskell — but this is only an ignorant point of view because those languages commonly have a Scientific usage, so they are not really academic languages, because you can see distributed models — including job queues — implemented over those languages. Probably other big companies are using languages like PHP but for small tasks, rather than enterprise applications, and rarely other languages like Erlang.

Some languages like Python and Ruby, are really productive due to its syntax and multi-paradigm approach. We have various of those cool languages running over the Java Virtual Machine and NET runtime, for example on the Java side we have Jython, JRuby, Scala, Clojure among other languages that can make your development tasks really effective. On the NET side we have IronPython, IronRuby, F# and similar languages. The problem is the fact that there are very few companies using those variants, and those companies commonly use the basic implementation of standard C# NET and standard Java. The reason is simple, the lack of interest from developers to learn new languages are making the usage of any other language impossible due to the lack of developers supporting that language. For example there are some companies leaving all their C language programs and changing them by Java programs due to the lack of developers supporting the C language.

«What is the kind of problems handled on those companies?». Another good question. The fact that depending on which language will be used in your projects, will determine the kind of problems that you will be solving. If you are an algorithm lover, you are lost as Java or NET developer. Most applications are Web Based applications consuming a SOA architecture, so you will have the job of consuming those services and you will probably never see the real logic of those problems that are solved by those services, because they rely on a Cobol or ABAP4 backends very far from you. So, your real job will be data insertion and extraction with technology related to XML and JSON, where both are hard to understand if you are not able to handle data structures like trees once you need to process an XML tree or a JSON tree recursively. Remember that you cannot use parallel programming or similar stuff on application containers, because that problem is already solved and most problems are reduced to problems with P time and O(n) complexity.

Due to the lack of risk assumption, those companies will never use a product which is not supported by another well known company, so, probably you will never see Apache Hadoop and some cool MapReduce implementation, and even you will not see a cool implementation of a MapReduce task in a cloud based environment like Amazon Elastic MapReduce, because most data managed by those companies is private.

So, the remaining companies are medium and small companies if you do not want to participate of that mechanic process and you want to use almost all your knowledge to solve problems. There are companies which are stuck on Web Development. Those companies are building dynamic web sites based on FOSS projects like content managers or blogs. That is not an option if you really want to develop applications and apply your knowledge. So, leave those jobs for people that well paid mechanic tasks, and non-well paid but lazy tasks. The next question is «where are present algorithmic problems»? and «where can I work»?. Well, the answer seems to be easy to solve. Algorithmic problems are present on those companies making products, a company that sell products — no matter if those products are desktop or SaaS products — they always need a good and creative programmer to solve hard problems.

Medium and small sized companies are using Message Queues, Job Queues and similar software, including architectures like OpenMP for parallel solutions. Every day we have more data to process, we have integration with social networks, third party services among too much stuff should be handled by real applications, not simple content managers. So we must take advantage of that software that can allow us to solve real problems in less time than linear processing, so we usually implement parallel or distributed processing reducing the computing time. I think that the best example are startups, once a startup grows and its processing requirement grow and they become useful applications for their customers, the amount of data requires a bigger processing capacity.

Also there are some good medium companies selling FOSS technologies allowing that kind of processing to their customers, which are usually big companies. They are doing a good job I think because they are introducing relatively new technology into their business process, allowing parallel and distributed processing, shortening processing time and getting early results due to their applications implementation. So, take advantage of the interview and ask for some technology of your interest, if the company rely on plain C# or Java, your job will probably be a boring job…


some illustrating anti-examples

case A, the O(n^2) implementer: on one of those big companies I’ve seen an algorithm implementation with O(n^2) complexity searching a value on a string cube due to searching algorithm used — with a very basic approach on searching algorithms and lack of knowledge on newer algorithms. So, seems to be common for some programmers to get stuck on that knowledge that was acquired when they were studying.

case B, the cpu can do it architect: there was a software architect solving a O(n) algorithm in linear time. That’s OK, but for a very small n, once that n has grown, the process got stuck for hours. So, no parallel programming or distributed computing was used to solve that problem. They cannot use relatively new technology like MapReduce because it is not still supported by any big corporations yet, and probably there was not enough knowledge to apply.


some illustrating good examples

case A, the mapreduce architect: on one of those service oriented companies they have decided to create a product, very specific for a customer, their architect was capable to solve a hard problem using Apache Hadoop and non linear time algorithms, the resulting solution was fast enough to be integrated with web services with almost real time responses, but with asynchronous requests due to the problem complexity, and they have a good account manager capable to sell Apache Hadoop as part of their product, both with good knowledge of distributed and parallel solutions.

case B, the polyglot programmer: there was application build on top of FOSS technologies, and the architect have designed a good application, and a big problem was required to be solved, a new hardware provide has sent a new device and they were requiring add support for that device on Linux. They were luck, because most of their programmers were polyglot programmers knowing C as part of their known programming languages. They do not missed their customer and they were able to make a new business bringing support for that new PKI device.


No coments yet.

post a comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>