Monday, December 2, 2013

How much money should I be making?

From what I talk to my friends, I understand that the concern in the Sri Lankan IT industry is that often its workers, despite long and hard work, the need for continually leaning to keep-up with the rapidly changing technologies, do not earn enough to enjoy a decent standard of living. The post war Sri Lanka, after effects of CHOGM, the rapidly rising cost of living that erodes the real wages and the stagnant or declining family incomes have given rise to the clamour for a more decent and fair wage structure in the industry. There is an industry strategy to base its competitive advantage on skilled work force and better labor standards, both of which needs a corresponding recognition of the value of the workers through adequate, livable and fair salaries.

It is also very true that most of us incur several hidden costs arising from our employment in IT industry, which is not readily apparent in the market determined wages. Compare to other industries, the hidden costs arising from our employment is high in IT industry and in this background, as no sector specific living wage has been calculated.

Living wage is not the same as minimum wage. Minimum wage is the lowest wage permitted by law or by a special agreement. A living wage is a wage which is high enough to maintain a normal standard of living. Usually, according to Google,

Living Wage = (Average household size x Adjusted cost of basic needs/person + (Income x Savings Multiplier)) / Average number of income receivers per house hold
OR
Living wage = (Adjusted cost of basic needs) + (Income X Savings Multiplier for savings + EPF + durables) + (a Constant for embedding the worker in the family unit + hidden cost)

Our wages would be reasonable according to the above equation, if we stupidly avoid calculating the hidden industry specific costs. For example, for me, as a software engineer, I’m required to browse internet, I need to have a computer and reasonably fast internet connect, a smart phone, money to go team outing with project members, contribute to the organizational charity events, clothing, books & magazines, professional trainings .etc..

Last couple of month I was asking around other people as to how much they are getting paid. A cleaner salary is around 20-30 grand a month in Abanse (shift basic); a Taxi driver makes 45 thousand a month while he has to pay lease 17,000; a Marketing executive in garment industry with 4 years of experience makes 55 thousand a month basic salary + commission approximately 30-70 thousand a month depending on time of the year; an assistant bank manager in a private bank with 5 years banking experience gets 120 thousand basic salary + 25 thousand for vehicle + paid holiday once an year; an intern job in a bank pays you 15 grand a month; a graphic designer with 4 years designer experience in a private advertising agency get 85 thousand basic.

My problem is, I don’t know how much salary I should be getting paid. Do you know how much your co-workers get paid at your company? I think you should. I mean, who is being protected by secret salaries? Certainly not the employee—the more transparent salaries are, the more accurately an employee can assess his or her value to a company.

I thought that companies benefit from secret salaries and that’s why they keep them secret, but the reality is that, if salaries were 100% accurate—perfectly pegged at the employee’s worth to the company—then the company would have no problem revealing all salaries. I know valuing an employee’s worth is not an easy job, yet that’s why the HR is for, right? The human resource team is the team responsible a company’s growth and its failures. As I see in the companies I have the close visibility, some senior managers hire college graduates as HR executives and let them run with whatever they got. Those people come and start to tell us what should be done in other departments(in some cases). The only people who benefit from confidential salaries are the human resources department. If they make an error, they can hide it. No one will know. And then they can make ten errors. Because no one knows if the secret salaries are hiding one error or one hundred.

At this time of year, companies are completing annual/quarterly reviews for employees, and many people are looking forward to promotions and salary raises. When they get it as they expect, everything is just fine and they will be motivated to work harder and enjoy the little happy things they get out of an employment. But, if they don’t get what they expected or what they deserve and told an unseasonal reason as to why they didn’t get it, there comes the part an individual and the company he/she works for gets really affected negatively. I agree, nothing motivates people as money does and not everyone deserves to be promoted or get salary rose.

If it’s a bad economy and people know other’s salary too, I don’t think they would be much worried about their salary knowing that everyone gets paid low. Person who was underpaid was not so much jubilant about a potential raise, but upset about his current underpayment. But honestly, I think that person will work much harder if everyone knows the truth.

There are four kinds of people who work in any organization as far as I see, in terms of salary and competence. First kind - working hard, competent, qualified, experienced and getting paid high – as they deserve. Second kind - working hard, competent, qualified, experienced and getting paid low(less than they should be getting paid) as they lack the ability to let others know that they work better. Third kind - lazy, incompetent, has a bad personality, but just by talking (boasting about their work) and claiming credits form others unfairly and getting paid more. The fourth kind – lazy, incompetent .etc. and getting paid less as they should be.

Sadly, we seem to have many of the second and third kinds of people in Sri Lanka. From what I know, people like to work and they want to make the best things, at least most of us. It’s just a matter of enabling them to do so would make any company better.

The other issue I see in Sri Lanka in terms of employment is that most of the HR professionals seem to value qualification over expertise whereas it’s seems to be the other way around in western countries. May be it’s their inability to evaluate a person’s skill set; they tend to go with qualification.

This type of issues drives me crazy because they are, in fact, real reason why many of us are struggling and they are not applicable to a small percentage of any organization's staff who can whine and talk HR. I’m going to quote here a comment I read in linked in
 “Management thinks: ‘This guy (or gal) will do whatever we ask in his current position and at his current wage; there is no reason to promote him much less pay him more money.’ The carrots of promotions and pay increases, oddly enough, are more likely to go to the entitled, under-performing and whiny employees who only work on a quid pro quo basis, while the sticks are reserved for those employees who give and don't count the cost. “ - Mike Bach (in a Linkedin comment)

A part of me asks myself “Why are you complaining? Why do you want to write about this on your blog no body reads? :)” The other part replies “I’m not. I’m just trying to express my frustration of existing ‘very real’ problem in a form, which can be read by others and relate to. This should help them understand this issue a little bit better and I know there would be people those who could make changes in evaluating people and rewarding right people and transform people’s life, industrial health & our country for better.
Pretending to work and posing for photo 8 years ago at my first job
Pretending to work and posing for photo, 8 years ago at my first job

Sunday, October 6, 2013

Memento

I was ambitious, having failed my A levels and didn't have any qualifications. I felt as if it would be my last and only chance to switch my life upside down. I knew very well, I can't afford to get anything wrong at the point of time where I was applying to go to UK, April-May time of 2008. Those days, I was not a fan of taking photographs or collecting souvenirs. I used to think that the life should just go on without collecting things to remember our lives as we live.
Managed to get the visa and went to UK. At the beginning, days were slowly passing by and dull with a big question mark about my future screwing me in my head everyday. It was not easy to have too many unknowns and stay alone reading the guide book university had provided us.

A long walk to university in the morning and evening, hours of effort trying to find a job, the excessive amount of learning in an accelerated condition of a new city and the cold whether confirmed my exhausted goodnight no-less-than-5 hours sleep every day. This was the time I found out that I had enough adrenaline to do anything I want to do pushing my physical limits I was aware of. These are the difficult times make a profound change in our lives.

It was an early morning and I was walking towards the railway station through a park close to the boarding I rented. I must have had woken up too early; I had enough time to catch the tube (train). I was feeling good to see frosted grasses shining at dawn sunrise and it's a miracle enjoying these things early in the morning without any coffee or tea in my system. I even had the energy to go out there in the cold and take some photographs on my good old K750i Sony Ericsson phone.

I could look at these pictures at any point of my life and remember my University life. Nowadays, some times when I'm free, I open the code files I wrote when I was in uni and wonder what was going through in my mind when I wrote them. Looking at the past may not be very beneficial thing to do, but it certainly is interesting and should never hesitate to capture our best moments in the present.

Today, I was going through the files to back-up and clean my computer to re-install windows 8 due to avast antivirus screw-up [FYI, Windows 8 won't work when you have Avast Antivirus installed:(]. When I go through the files, I found some of the project files I worked on and lost myself for a while thinking about the days. Some of the project I worked on could have been managed better. Now I realize that the project managing approach I was introduced to had flows.  I managed to get rid of some of the issues I had when it comes to project management and dealing with people. Yeah, I had issues... yeah I certainly did have issues and I still have a few of them I had. Need to spot them, isolate them, take a good look at them and work on them before it's too late. Clock is ticking. Our past's increasing and our future's decreasing. We should record the present while we live it. We should replay the past once in a while to see what we did and move on to the future to do it better.

“We can't solve problems by using the same kind of thinking we used when we created them.”
Albert Einstein

Sunday, September 22, 2013

Logos hope visits Colombo Harbour and I need a tablet.

I ran out of Internet bandwidth for this month. SLT package I have at home gives my family the luxury of 25 GByte worth the Internet serf a month. Should we want to use after the bandwidth limit, we will have an Internet at a 64 KByte per second speed. So, got frustrated try to access my documents on Google Drive and switched off my computer to go see the "Logos hope" ship book fair.
Colombo Harbour
Colombo Harbour

There is always a mystery I feel about oceans or sea. I love big ships and I'm fortunate enough to go in two of the fairly big ones so far in my life. This was truly nice evening for me to visit Colombo port area and the "Logos hope" ship when they are parked in Colombo to showcase and sell books from all over the world. There were roughly about five thousand books and they were fairly reasonable on price. All the book prices were in units. 100 units' equal to 240 Sri Lankan Rupees, by-the-way. Also, I learned that Estelle van Eeden, originally from South Africa but now based in Sri Lanka, finished her two year commitment on the ship last year and she was there for her debut picture book, Lost Things, aimed at four to eight year olds. Logos Hope crew members helped at the launch of the book by dressing up as clowns, painting faces and hands and hanging out with the local kids from Colombo. "The Logos Hope crew have helped make this day awesome for the kids of our community in Sri Lanka," commented Estelle.
Logos hope ship - Colombo Harbour
Logos hope ship - Colombo Harbour

When I looked at these awesomely cool books with cool pictures and all awesome quality papers with the new-book-smell, I badly wanted to buy them, read them, keep them at home, look at them when I feel bored, sell them, buy more of them and want to write some of them best ones once I read enough books to write my own ones.
Colombo Harbour - Logos hope & Tiger Pearl
Colombo Harbour - Logos hope & Tiger Pearl 

So, let me start the real topic of this post. Tablets. If I really want to take my book-reading to next level, I need a tablet. I can't be buying books and taking with me everywhere to read. I feel having a nice tablet would really enhance my lifestyle as a book enthusiastic and wannabe writer. I always felt happy seeing people happily reading books/eBooks on their tablet at coffee shops, restaurants and parks etc.. There are things makes me happy I don't know why and now I just want a tablet. To be honest with you guys, I have two problems. One, I need to find the money to buy the tablet I want to buy. Second, I want to figure out what is the best one for me. There are about dozen good tablet makes and about a couple of good mobile operation systems the tablets use. Now about a few of years I want to buy a good tablet I could take with me everywhere and read, write and do my social networking. Ever since I watch the iPad mini promo video, I have this feeling that iPad could have been a better option. iPhone is awesome, it's just that I can't really do reading on my iPhone. I can't complain iPhone typing.

Colombo Harbour Area
Colombo Harbour Area

Now, I'm looking to buy a tablet that I could,
  1. Use flawlessly to reading things on the Internet.
  2. Better touch sensitivity. Type without getting annoyed with the touch software-keyboard. Physical keyboard compatibility is a must.
  3. Long battery life. I should be able to continually use it without charging at least for a day.
  4. It has to be either android or iOS. Not that I think Ubuntu or blackberry or doesn't do a good job, it's just that I think using an operating system most of others use would be an good option to relate to and talk about. Also, I expect them to grow faster than other operating systems. Windows is not an option. I had a chance to try it and I hate the whole thing. If you ask me, Microsoft sill doesn't understand the basic elements of user friendliness.
  5. use long time (Durability and build quality)
  6. has a better display.(High-definition, anti-glare display)
  7. use fast Internet (Wireless Internet connectivity and mobile broadband)
  8. use GPS satellite location
  9. take some normal shots or videos (I really don't care much about the camera.)
  10. save a lot things (Data storage. not very important. Cloud storage options for backup and syncing data across devices)
  11. have Accelerometer (Detects the physical movement and orientation of the tablet. This allows the touchscreen display to shift to either portrait or landscape mode. In addition, tilting the tablet may be used as an input [for instance to steer in a driving game])
  12. have Ambient light and proximity sensors, which help distinguish between intentional and unintentional touches.
  13. talk to the tablet (Speech recognition - Siri or Google Now)

You guys know how much of a good Google researcher I am, right? So, I used my super-power and did a bit of a research and found that toptenreviews.com published an excellent comparison and 10-9 ? Excellent, 8-6 ? Good,5-4 ? Average, 3-2 ? Poor & 1-0 ? Bad

#1 #2 #3 #4 #5 #6 #7 #8 #9 #10


The new iPad Microsoft Surface Samsung Galaxy Tab 10.1 Nexus 7 Sony Xperia Tablet S Asus Transformer Pad Infinity Kindle Fire HD Motorola Xoom BlackBerry Playbook HP Slate 2

**********
Ratings 10.00 9.93 9.68 9.65 9.50 9.20 9.20 8.68 7.90 7.90
Features









Operating System iOS 5 Microsoft RT Android 4.0 Android 4.1 Android 4.0 Android 4.0 Android 4.0 Android 3.1 BlackBerry Windows 7
Rear Camera 5.0MP 1.2MP 3.0MP N/A 8.0MP 8.0MP N/A 5.0MP 5.0MP 3.0MP
Front Camera 0.3MP 1.2MP 0.3MP 1.2MP 1.0MP 2.0MP 1.3MP 2.0MP 3.0MP 0.3MP
Communication Wi-Fi, 4G Wi-Fi / Bluetooth Wi-Fi, 3G, 4G Wi-Fi Wi-Fi Wi-Fi Wi-Fi Wi-Fi Wi-Fi Wi-Fi
Battery Life (hours) 10 8 10 10 12 9.5 11 10 10 7.5
Warranty (years) 1 1 1 1 1 1 1 1 1 1
Music Player
Accelerometer
Video Chat
GPS
Built-in eReader
HD Video Recording

Hardware









Processor Speed 1GHz 1.3GHz 1GHz 1.3GHz 1.4GHz 1.6GHz 1.2GHz 1GHz 1GHz 1.5 GHz
Processor Cores Dual-Core A5X Quad Core Tegra 3 Dual-Core Cortex-A9 Quad-Core Tegra 3 NVIDIA Tegra 3.0 NVIDIA Tegra 3 4-Plus-1 Dual-Core Cortex-A9 Dual-Core Cortex-A9 Dual-Core Cortex-A9 Intel Atom Z670
Memory 16/32/64GB 32/64 16/32GB + Up to 32GB 8/16 16GB + Up to 64GB 32/64GB 16/32GB 32GB 16/32/64GB 64GB
Built-in Speakers
Built-in Microphone
3.5 mm Headphone Jack
USB
Display









Screen Type Touchscreen Touchscreen Touchscreen Touchscreen Touchscreen Touchscreen Touchscreen Touchscreen Touchscreen Touchscreen
Screen Size (inches) 9.7 10.6 10.1 7 9.4 10.1 7 10.1 7 8.9
Screen Resolution 2048 x 1536 1366 x 768 1280 x 800 1280 x 800 1280 x 800 1920 x 1200 1280 x 800 1280 x 800 1024 x 600 1024 x 600
Height (inches) 9.5 10.81 6.9 7.8 9.5 10.35 7.6 9.8 7.6 9.2
Width (inches) 7.3 6.77 10.1 4.7 6.9 7.12 5.4 6.6 5.1 5.9
Depth (inches) 0.4 0.37 0.4 0.4 0.4 0.33 0.4 0.5 0.4 0.6
Weight (pounds) 1.46 1.5 1.28 0.75 1.26 1.3 0.87 1.6 0.9 1.5

iPad mini
iPad mini
The above table gives us a big clear picture of the feature and user ratings, however, the current superstar iPad mini is not in the comparison and that's my favourite by far. I watched the promo video on YouTube and I feel that this would be 1) very light weight 2) could use a day or two without recharging 3) should fit perfectly fine in my palm 4) could attach a Bluetooth enabled physical keyboard. 5) don't have to talk about the build quality, it's apple:) 6) It has the same screen resolution as the bigger one 7) I could sync the apps and data with my iPhone. Yet, I want to wait for a 64 bit iPad mini. Now that we have 64 bit iPhone with fingerprint scanner, my guess is that we would see a much advanced iPad mini in the near future and I badly want to wait for it. Also, obviously, use the time to save some money for it.

I hope you find this useful or interesting and could think about buying your own tablet. It would be wise for you to list down all the things you want to do with a tablet and compare the features against your budget before you buy. This post might have been a bit boring, if you're not planing on buying a tablet, but hey!, information is wealth:)

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.

Thursday, August 15, 2013

What programming language should I choose to excel on and why?

The first software package I ever learned is Microsoft Excel in 1997 at my school, Jaffna Hindu College. Some of our old school union people thought that the young pupil in our school should learn computer. I’m grateful to my school and I should write about my schools in another post. Computer was a very alien idea at that time to me. Probably to most of them in Jaffna. At school they plugged the computers up and showed us as an exhibit first. The Pentium D computers had Windows 95 as I remember. After months they let us touch it and play with it, that we would go in there and with instructions, we would left click on the start and go to programs > accessories and open word pad to type our names. We did this for couple of months once a week for a class period after lunch break on every Friday. It's very exciting, not having electricity at home and to experience this miracle machine for about 40 minutes every week.

In 1998, Thanks to Dugles Devanana, a politician at that time in Jaffna, had an institute opened to study computer called ‘IT Park’ and I joined with my parents support to Study Microsoft Excel. Ever since I clicked on the ‘Start’ button, everything excites me when it comes to computer. Everything’s still an absolute magic and as intact nothing understandable. Then over the cause of last 15 years, I have learnt number of programming languages. The main ones are PHP, Flash Action Scripts, ASP, JAVA and .NET. It’s really a headache to decide as to which one to go for when I start a new project.

I spent my early tech life praising php. It is still a great language for many specific type of web development. Easy to learn, easy to use, free, widely used, most hostings support, simple and sweet. Hosting applications on low budget or deploying /changing the hosting location is extremely easy and I never had any issues deploying. However, PHP is not great at scaling in terms of programming. The main problem with PHP isn't that it's not scalable. The problem is that the majority of PHP coders don't have a clue about OOP, design patterns, coding standards and simply don't know how to write scalable code although it's perfectly feasible in PHP.

For small applications, though, J2EE and .NET can really be overkill. In Java, a lot of time needs to be spent configuring and tuning Hibernate, struts-config, etc, so simple CRUD applications are usually done best in PHP.

So, it would be unfair to compare PHP with Java or .Net. PHP is best to develop simple sites. I think, we should only compare Java and .NET due to the similarity and the capabilities.

Both multi-tiered, similar computing technologies, both support “standards”, both offer different tools & ways to achieve the same goal. A lot of parallelism can be seen. Very difficult to compare and qualify the comparison because each has its own advantages & disadvantages.

So, when I think about Java,
  1. Truly platform independent.
  2. Free(very much) and Open Source (very little).
  3. Loads of libraries and APIs available.
  4. According the Java Update Advert, more than 3 billion devices use Java.
  5. Very secure and stable, but comparatively slow.
  6. True object oriented.
  7. Methods are virtual by default and static imports available.
  8. Instance-level inner classes and interface for enums.
  9. As far as I see, more job opportunities.
  10. Many major applications are written in Java. (For example, I’m currently working on Pega BPM suit and it’s extremely sophisticated and purely written in JAVA.)
  11. Easy integration to new devices without the need to have windows.
And .NET (C# mainly)
  1. No automatic fall-through from one case block to the next.
  2. Strongly-typed enums.
  3. By reference calls are explicit at caller AND callee.
  4. Method overrides are explicit.
  5. Supports versioning.
  6. Structs (value types).
  7. Integrated support for properties and events.
  8. Can still use pointers with RAD language.
  9. Can share data and use functionality with components written in many different languages.
  10. Unsigned integers.
  11. High precision decimal number.
  12. Complex numbers.
  13. Value types.
  14. Lifted (nullable) types.
  15. Tuples.
  16. Pointers.
  17. Instance-level inner classes.
  18. Statement-level (local) anonymous classes.
  19. Enums can implement interfaces.
  20. Object initializers & Collection initializers.
  21. Explicit interface implementation.
  22. Reference (input/output) parameters & Output (output) parameters.
  23. Runtime realization.
  24. Value/primitive type constraint.
  25. Constructor constraint.
  26. Primitive/value type support.
  27. Method references.
  28. Closures.
  29. Lambda expressions.
  30. Expression trees.
  31. Generic query language.
  32. Late-bound (dynamic) type.
  33. Runtime generics realization.

I feel lucky to have chosen this career path that I often get to have fun coding and doing many fun things, yet there is one thing is really annoying. New immature technologies quickly be able to gain popularity and kill giant technologies or treads. We spend learning a language taking years and by the time we become competent, there would be a new and better programing language getting attention. I have been coding in PHP, Java and in C# the last decade and the fairly new languages ROR and GO makes me nervous.

Just to write this blog post, I was reading about Go lang and Ruby on Rails. As far as I read, it’s a bit tough to write something sensible on Go with my knowledge. I understand that it’s an improved C and not a pure object oriented language, more of procedure language. Google initiated and developing to handle it’s “Big Problems”. I don’t see any big company using other than Google and the online resources and learning materials are limited.

On the other hand, ROR is now becoming extremely popular and I see why. I really want to learn ROR for many good reasons. Ruby is a programming language, and Rails is an application framework that uses Ruby. ROR lives by the principle that "convention over configuration" which is something I'm still struggling to understand. Rails is written in Ruby, which is a language explicitly designed with the goal of increasing programmer happiness. It is very true.

Now about 2 to 3 hours I’m trying different different code techniques on ROR and it’s truly a joy coding. Please check the code below and if you could think of a C# or PHP or java version of it, you will understand what I’m talking about. I guess, you could really have fun coding once you started off with ROR.

describe Bowling do
before(:each) do
@bowling = Bowling.new
endit "should score 0 for gutter game" do
20.times { @bowling.hit(0) }
@bowling.score.should == 0
end
end
So to conclude the first question I had in my previous post, I’m going to say, programing language choice should really be about the project we are going to be working on considering the,
  1. Complexity.
  2. Scale.
  3. Type of project.
  4. Resources needed.
  5. Performance and security.
However, I would want to make myself really family with .NET to work on medium or large scale projects with enough budget and ROR to work on small and medium size projects with considerably low budget.

.NET to have ROR style of programing would be my dream.

Monday, July 22, 2013

It’s a never ending quest

Today, now, as any other weekend evenings; I’m ly-ing partially arching my back on the warm sand in the beach comfortably. My mind feels clean, must be this gentle breeze coming from sea towards the beach and the moon light. It’s around 7.30 PM now. No sun, but moon is on night shift. Beach side lights complaining moon’s job. Unusually few people for Sunday.

I don’t remember thinking anything when come and sit here, but then as I start to look around, the people walk, talk, lights, dogs, coconut trees, bars, restaurants and hotels; looking at these, little-little ideas/thoughts/judgments/comments start to pop inside my brain. Tomorrow is full moon day, so today; moon’s bright and beautiful lighting up the whole beach and the sea. The people are truly blessed to be here and experience this.

Mostly these chains of thoughts make me paranoid and leave me with a million questions. Why am I here? What am I doing? Who these people are?  What are they doing here? Why some are happy and some are not? Why some are rich and others are not? Why some drink a lot, shout and laugh to a point they bother others? The questions list is usually very big that I get frustrated not being able to answer any and feeling petite.  Most people seem to be comfortable agreeing with whatever the religion they follow to answer these questions somewhat irrationally and blindly. I have a need to make sense when I tell myself something. If I tell myself that I’m here because god created me, I know I will really get angry at myself easily. So, I can’t try to answer myself any of these questions relying solely on religion.

Some of the questions popped in my head are in and around the area where I’m comfortable answering.
  1. What programming language should I choose to excel on and why?
  2. How to keep me up-to-date with the current technologies?
  3. iOS or Android and would I need a tablet?
  4. Where I want to settle down?
  5. What are the things I badly want to change in my personal life?
  6. How I want to change the world?

Most of the time when I think about these things, I add a note to my “any.DO” app in my iOS, which is awesome BTW, and remind myself everyday to make them a routine or to complete them or make a decision on. Since I don’t have anything nice to write in my blog, I’m thinking of picking some of the things I noted in my “any.DO” relating to the some of the questions I have been asking myself and answer them in future posts. I’m typing this on my iPhone blogger app as I’m listening to some quality Jazz. It’s not something I find easy to do. I’m still struggling to acclimatize to mobile-computing; I’m still more comfortable typing on a computer.

So, I’m going to switch to Microsoft OneNote and note down the things I want to write when I post separate blog entries answering the above questions. Talking about OneNote, if you’re using any iOS devices, please try Microsoft Office OneNote. …….. ahhhhh… Also,  It’s a bit dark here and my camera doesn’t do a good job in low light conditions yet I shot some ok pictures to post along with this blog entry to give you guys a sagacity of what I’m talking about.

I would really appreciate guys, if you could email or comment your answers to the questions I talked about. I badly want to get interactive with the bloggers community and learn art of writing, but so far I couldn’t find an easy way to do that.

I’m doing so many things thinking one day or another these things are going to make sense. Hope I’m right and thank you, if you want to say to me “Hey! Who knows what’s going on? Do what you feel like doing.” Life seems to be a never ending pursuit of answers to so many questions we have and as we experience new many things every day we get the answers and forget the questions.

Sunday, May 26, 2013

Discovering - Finding the real me.



Finding the real me is an enlightening experience. I believe knowing ourselves are very important in order to know what we can do with ourselves. I become self-sufficient and do things for myself, for once. I'm no longer needy and become utterly grateful for all the things people have done for me in the past. Finding the real me is a time of harmony because I develop the philosophy or belief system that will carry me throughout the rest of my life. From the day we remember being as a kid till now we have gone through a lot, processed a massive amount of information, judged a lot of incidents/people and dealt with many problems.

How do I know that I found myself or I know me. Well, I don't; as a matter of fact I don't even know how much I know about me or how much more there to know about me. I would make a guess that no body can' t, unless you're a religiously crafty person making others fool, I don't think anybody can.

So, why am I writing about this at this point of time or what made me write about this today. Today, I found myself getting up early, took a wash, eat, cleaned my place, did the washing and many other things without any tired or any frustration as to how many thing there to be done. Today, I'm just keeping myself calm by some miracle and doing everything I had planned one by one without pushing myself much.

When you become more aware of yourself, know about your habits, know things around you better and getting used to dealing with things of similar nature, everything becomes so easy and less challenging. Basically, we become experienced in one routine of life, that routine becomes easy to follow and less challenging.

I feel like I'm so comfortable with my current life-style that things get done on its own. Which is something I don't think takes me in a good direction. I'm one of those people like challenge and like to have goals. I have not reached my goals, but in a narrow sense I neither see any challenges. I feel like I should change some things around to keep me challenged. Could be a new project or new job or something new that should make my head spin:)

Knowing oneself, is kind of a confusing subject to think about. What I really mean by knowing myself is that Now I feel like I know what kind of situations makes me happy, what make me sneeze, what makes me sick, what should I do to make me healthy, how I should plan my Sunday morning to keep me happy. Many other things I was doing so badly and learnt to do better. Just one another example is, recently I met with an accident and I should now be able to deal with a police case without much stress. It feel so much better when you know how to do things.

Now, just to keep this blog post interesting, I'm going to give you some pointers or some of the things you could do and follow to find yourself.
  1. Go to a place where there is no body. Sit there relaxed and loose yourself thinking about the current problems you have. Go through every detail of the problems you have. Just think about them unconsciously while you enjoy the peaceful surrounding where you're without anybody near to you. Do this at least an hour then automatically you will see some ideas/solutions to your problems popping in  your head. Think of the solutions you get consciously and choose the right ones to make-happen. Whenever I have problems or whenever I find myself alone peacefully, I do this.
  2. It's also a good idea to practice to have a checklist checked in your head all the time. It really helps keep me focused. Whether it's a short term goal or a long term one, just add it to the list in your head and keep them checked all the time.
  3. Write down all the major goals somewhere you can see everyday, big and clear. So you would be able to remember the things you have to do and you could keep track of the time as well. If there is anything I learnt in my university, it would be time, I got second class upper degree where I should have got first class because I gave an individual project a day late. So, time is very important for success guys and Now I'm very happy that I'm getting much better at completing things on time. 
  4. Another thing is that when you want to do something or get something big done, start with a clean state of mind. Recently, I'm lucky to work on some interesting defects at work and every time when I start looking at a problem with a clean and clear state of mind, I find myself with a fairly good solution that fixes the problem without breaking anything else.
  5. One of the biggest problems I'm trying to overcome is that I have this need to be accepted by all or liked/loved by all. I think, this is coming from the human need to be a hero. This is one of the biggest problem for most of our guys. I want to settle down on something once I'm OK with what I'm doing. Nowadays I keep remind myself that I don't need to be loved by everyone all the time. If I'm not quite sure then I seek help from some few people I trust. Not everyone is a saint and we don't have to seek approval from everyone for everything we do and I'm continuing to fail to understand this. Hopefully, I'll get better at understanding this when I meet more bad people:)
  6. I feel that not depending on anyone for some crucial things in life is one of my strengths. This is purely because of my childhood in Jaffna. If you're born and brought up in Jaffna, you'll get this character automatically, you don't even have to try.
  7. Help. I really only want to help the ones those who really need it. I hate to help the lazy ones. Also, I try not to disturb others to help. Some people say seeking help is as equally good as helping others. They must be right.
  8. "The best way to find yourself is to lose yourself in the service of others" - Mahathama Ghandi.  
  9. One thing I learn from the accident I met with in this January is that we should expect everything all the time and we should kinda be ready for it, if possible. Starting with taking an umbrella before rain till having some money in the bank saved thinking in case if I loose my job. This is something I couldn't make happen in my life. I'm trying so hard, but mostly there is a bad word interrupts - ignorance.
  10. Questing everything and Enjoying solitude are the two best characteristics of mine, however, I don't see  how that helps in Sri Lanka. I have heard people say those are good qualities though:)
That's all I got for today out of the excitement of discovering myself:) 

One more important thing, as I have mentioned earlier, I met with an accident recently and a lawyer truly helped me get through some of the problems in the process of claiming the insurance money. She takes part in an organization called "Business and Professional Women Sri Lanka" that helps people. I would appreciate, if you guys could help them raise money. Please visit: http://www.bpwsrilanka.lk/projects.html