Saturday, August 31, 2013

How to keep me up-to-date with the latest technologies?

This is a million dollar question for most of the programmers. Programmers often live in virtual language specific world including myself and when we asked to go to another world, we get annoyed. When we spend years discovering a world and hear about a better one, it’s not a good feeling.

When I talk about keeping me up-to-date with the current technologies, I have to touch a subject called “programming paradigm”. It was interesting listening to Dr Evens’s lecture on “Programming Paradigms” and the stories about how computer languages evolved by time; was very fascinating. Let’s look at the definition of paradigm first, with the help of Google.

Paradigm: "A philosophical and theoretical framework of a scientific school or discipline within which theories, laws, and generalizations and the experiments performed in support of them are formulated; broadly: a philosophical or theoretical framework of any kind"

I have to tell something off topic here, in Virtusa we had an internal seminar organized by our training team and one of the highly experienced trainers, JJ, talked about Paradigm shift and how important that we/companies should cope with it. It has been a while since I attended the seminar and as I remember it, it’s one of the essential and fun things to learn that  the Swiss watchmakers had the paradigm that a watch was a mechanical device, i.e., to be a watch it had to have springs, gears, moving second, minute, and hour hands, etc. The end result was that this research was abandoned because it was not a “real” watch. However, they did put the research on display and when the Japanese companies like Seiko saw it their paradigm was “time keeping device” and they grabbed the digital watch concept and ran with it. The end result was that because of their inability to make a paradigm shift from a watch being a “mechanical device” to a “timekeeping electronic device” the Swiss watch industry almost collapsed because of the Japanese were able to make this paradigm shift. In the seminar then JJ went on to discuss how it is important for a business to know what paradigms it has, to understand them, and, most importantly, be constantly on the lookout for technologies or innovations that can cause a paradigm shift. Why? Because if you miss it you can be out of business.

Coming back to “Programming Paradigms”, first will look at the main paradigms in software industry especially on PP. The first thing I studied in Uni was about the History and the generations of Computer Programming Languages. If we were to skim through the main chapters, we can look through the main four generations with the help of Google. I’m at the moment working using a 4th generation Programming Language  - BPM Workflow manager , PRPC, which uses Java and Oracle in the core engine and enable users to code by just using flows and web based visual controls. Everything else are done in the background from Hibernate-like table class mapping to external system integration.

The first generation program language(1GL) is pure machine code, that is just ones and zeros. Programmers have to design their code by hand then transfer it to a computer by using a punch card, punch tape or flicking switches. There is no need to translate the code and it will run straight away. Code can be fast and efficient and can make use of specific processor features such as special registers, however, code cannot be ported to other systems and has to be rewritten and difficult to edit and update.

Second-generation programming languages(2GL) are a way of describing Assembly code. I have absolutely no idea how this works. Google says that it is done by using code resembling. Assembly code has similar benefits to writing in machine code, it is a one to one relationship after all. This means that assembly code is often used when writing low level fast code for specific hardware. Until recently machine code was used to program things such as mobile phones, but with the speed and performance of languages such as C being very close to Assembly, and with C's ability to talk to processor registers, Assembly's use is declining. Code can be fast, efficient,make use of specific processor features such as special registers and it is closer to plain English, it is easier to read and write when compared to machine code. Here also the code cannot be ported to other systems and has to be rewritten
For example:
ADD 12,8

Even though Assembly code is easier to read than machine code, it is still not straightforward to perform loops and conditionals and writing large programs can be a slow process creating a mish-mash of goto statements and jumps. Third-generation programming languages(3GL) brought many programmer-friendly features to code such as loops, conditionals, classes etc. This means that one line of third generation code can produce many lines of object (machine) code, saving a lot of time when writing programs.
Imperative languages - code is executed line by line, in a programmer defined sequence. Third generation (High Level Languages) codes are imperative. Imperative means that code is executed line by line, in sequence.
For example:
dim x as integer
x = 3
dim y as integer
y = 5
x = x + y
console.writeline(x)
Would output: 8

Third generation languages(3GL) can be platform independent, meaning that code written for one system will work on another. To convert a 3rd generation program into object code requires a Compiler or an Interpreter, Hardware independence, can be easily ported to other systems and processors and programmer friendly, one line of 3rd gen is the equivalent of many lines of 1st and 2nd gen, However, the code produced might not make the best use of processor specific features unlike 1st and 2nd gen.

Fourth-generation languages(4GL) are designed to reduce programming effort and the time it takes to develop software, resulting in a reduction in the cost of software development. They are not always successful in this task, sometimes resulting in inelegant and hard to maintain code. Languages have been designed with a specific purpose in mind and this might include languages to query databases (SQL), languages to make reports (Oracle Reports) and languages to construct user interface (XUL). An example of 4th generation programming type is the declarative language. An example of a Structured Query Language (SQL) to select criminal details from a database. Declarative languages - describe what computation should be performed and not how to perform it. Not imperative!
For example: EXTRACT ALL CUSTOMERS WHERE "PREVIOUS PURCHASES" TOTAL MORE THAN $1000

It gets more interesting than that, now we have a 5th generation concept and which is called 5GL. Fifth-Generation Programming Language (5GL) is a programming language based around solving problems using constraints given to the program, rather than using an algorithm written by a programmer. Most constraint-based and logic programming languages and some declarative languages are fifth-generation languages. Fifth-generation languages are used mainly in artificial intelligence research. Prolog, OPS5, and Mercury are the best known fifth-generation languages.

Let’s look at the big picture, the big-bang of languages:
big-bang of languages
big-bang of languages
Thanks: http://www.cse.chalmers.se/~bernardy/pp/Lectures.html#sec-1

These paradigm-shifts happen so fast in our industry more than in any other industry. Not only software or programming languages, but also hardware. When I was developing websites half a decade ago, I only had to worry about computers and screen resolutions. Now, we have mobiles, tablets, computers, many other screen dimensions and device capabilities to worry about. Devices and its capabilities are getting sophisticated every day and software industry also growing very fast trying to serve the devices well.

We, programmers, could learn a concept or programming language or a design pattern today and it might well be discarded tomorrow. If you disagree with me, ask about what happened to me have studied Macromedia/Adobe Flash. Those days I was crazy happy making websites using flash , now I don't even have flash installed in my computer.

So, how do we deal with this problem? To be honest, there are more than one questions associated with this question. Before we try to answer this question, we should ask some questions ourselves to get the context right. For example, what I exactly want to do? We could just say, I'm a programmer, but we can't be just coding in every programming language or be doing everything out there falls in the software programming category.  I believe, to succeed in our industry, it's vital that we should be specific about what we want to do while having the firm understanding of the fundamental concepts. We should choose very specific areas of our profession and should get certified and should know everything possible in that specific area. Choosing very specific areas to excel and succeed has its risk, yet I don't think there is anything we could do about it. We should just be willing to take the changes as we grow. As I already mentioned a million times in my blog, I'm now working in BPM steam using Pega tool and I know it's a big risk, if there would be a better Business Process Manger out there in the market tomorrow. So,outside my work hours, I try to keep me aware of the other things happening out there in the dark.

Also, I think, it's important that we should be absolutely clear that agile is turning into a mainstream methodology, and soon only a few extinct mammoths will do waterfall. Agile has won the race. Microsoft is now working to improve agile methodology support many of its products, they also do iterative development for many of their products. IBM has launched Jazz agile platform. Pega supports mainly that.

Software is not like any other product it is often compared to. It is fundamentally different from a car or a house.  Every project is different, even if only the team is different, so there is less predictability. The industry is small, fast-moving, and there is no complete well-known set of templates and methodologies that guarantee timely delivery of a wide variety of tasks – simply because many of the best methodologies, practices, and platforms and tools are a work in progress.

So, I think, including myself, we should just stop worrying about keeping us on the edge and just keeping doing what we love doing and not to ignore the major changes. To me, It's very important to be in every race than winning a race and backing off for the next one. I see successful people in the industry, they still only know BASIC or PASCAL language.

I could give you some pointers that I think might be useful for you. In the classical sense, if you like to keep you up-to-date on your industry, you should find ways to stay informed. Many of us work in changing competitive environments. If we don't keep up with news and trends, we can miss key opportunities and can be caught unawares. That's why, for some of us, it's important to keep-in-touch with news and trends in our industries. Although keeping up with industry news may seem to be just one more thing to add to your To-Do List, there are several important benefits. First, you'll make better decisions, and you'll spot threats and opportunities early on, which can give you a competitive edge.

So how do we stay informed to keep us up-to-date..?

  1. We should find a mentor. I have a few people, I look up to. A great starting point is to find a mentor within the place you work. Not only can mentors help you solve career issues and develop your career, they can provide you with a wealth of insider knowledge, as well as with the insight needed to understand it.
  2. Subscribing to some popular magazines those could help us be informed. Our industry may have one or more trade organizations that you can join. These are useful, because they can help to keep you informed with their newsletters and publications, and they provide networking opportunities with meetings and conferences.
  3. Seminars and conferences are great for learning about new technologies, new products, and industry trends; and they can provide ample networking opportunities.
  4. Having tech friends outside work can be one of the most rewarding ways to stay on top of industry news and trends. We could have a wide pool of people to network with. People directly related to our industry are an obvious choice, but so are industry related people, customers, and people working in related fields.
  5. Blogs aren't just for personal journaling anymore. Many bloggers are respected for their high quality work and honest opinion. Whatever I write happens to just be the solutions I find to the problems I face and I know my friend and readers could relate to them.
  6. Keep Google, Twitter, LinkedIn and tech forums in your pocket. Yeah I'm saying it's a must that you have a smart phone:)
  7. Making Time, Sharing and Using are the last and not definitely least tip I could think of to keep us up-to-date.

No comments:

Post a Comment