[Dev Tip] Switching to Java is Self-Destructive!

Over Career forums, I was answering a question by .Net Programmer, he  wanted to switch to Java due to company requirement.  I found some answers supporting the move.  In my view, it is NOT-A-GOOD-IDEA to switch from .Net to Java.  If i were asked on the matter:

My quick answer would be: Do not switch!

Scenario

You are a .Net Programmer with 5+ years of experience.  You love the platform & enjoy your day-to-day programming life.  One day your boss come & says “Buddy… We have a long term Java Project in hand, we require you to learn Java & render the project!”

What you will do?

You will feel regretful in leaving .Net!  A series of thoughts & questions will arise in your mind:

  1. I do not like Java!
  2. Can i learn Java?
  3. What about my hard earned .Net skills?
  4. Is there a risk that I forget .Net?
  5. What will happen to my career?
  6. After 1 year the Industry perceive me as .Net or Java guy?

 

You can always find switching-supporting arguments, preferably from your boss or manager.  Following are some of the tactical arguments which i remember:

  1. Great Programmers never insists on particular language
  2. All languages are converted to machine language for execution, so doesn’t matter .Net or Java!
  3. You won’t forget .Net after 1 year
  4. Java is better than .Net
  5. Having Java in resume will increase your value

Often i see the Information World is more of false/wrong/contextual information.  It takes some real processing to filter out the weed information.  I will answer the above statements at the end of the article.

 

How Career Value is increasing?

Career Growth implies more productivity output for same time-input, more capabilities earned, more quality & more..

We have to see the multiple factors that contribute towards career growth:

  1. Increase by year (more projects >> more knowledge >> more value)
  2. Increase by technology (.net, c#, entity framework, wcf, sql server)
  3. Increase by business acumen (financial, insurance, power sector)
  4. Increase by methodology (cmm, scrum, tdd)
  5. Increase by company (overseas client, mnc exposure)

We are talking about the second point highlighted.

Java is a different animal!

Adding Java to the .Net pack will require you to go through the following preliminary aspects of Java:

  • Learn Java Language
  • Get familiar with IDE
  • Learn Collections
  • Learn GUI aspects
  • Build & Deploy
  • Troubleshoot
  • Learn ORM (Hibernate)
  • Learn J2EE (struts, ejb etc.)

Surely, you end up in a different plane with Java!  You can see that, 1 year working on these aspects won’t add to your .Net experience as it would be a parallel track & no-total-value increase.  So you are wasting your energy.

In the .Net track, value increases if over the years you build on top of knowledge like > windows app > phone app > web app > certifications > .net reflection > componentisation > entity framework > large project implementation > agile > tech lead > team lead > architect > like that..

Same as the case of Java guy switching to .Net.

Work Enjoyment Aspects

Programming is a great Job for the Programmer-Material people.  They enjoy hours spend @ work.  But the enjoyment will be drastically reduced if we are not FAMILIAR with the technology.  Surely a configuration issue can create hectic hours.

While working in Java with amateur training OR no-training, yield your pleasant days to hectic in no-time.  I don’t think these small companies spend enough money on training resources; they will be looking for quick turnaround.

Additionally, working in a less-known technology, create OVER-TIME scenarios.

So working in Java could be PAIN!

Why fresher is paid less?

One thing we should not forget that “When we were freshers, only few companies were ready to hire us”.  Later we gained experience & after 5 years, there are 10 or more companies at the same time to hire us.  This demand/supply fluctuation is made through CAREER VALUE.

As Warren Buffet says “Do not do anything that lose money”, similarly I would say:

“Do not do anything that lose career value!”

Memory Aspects

Learning to Drive a Bike & Learning to use Computer is stored in different memory areas.  But returning to a Bajaj Pulsar bike after you were riding Yamaha Z bike would be a problem – you will face difficulty with gear box, brakes, control etc. (as they work on the same memory area)

Similarly working in Java & returning to .Net after 1 year will surely make difficulties in thinking process, writing code, F5 key to run etc.  These 2 are colliding skills.

I am not a psychiatrist to convey it… But as you are a smart guy, you got what i am trying to say.. Right?

My own experience

I am writing this from my own experience.  Years back i was working in .Net, Delphi, Java, PHP, HTML, VC++, Disassembly, all in one year.  My mind used to get cluttered between Win32 API call, Java SWT, PHP Variable Declaration, and Eclipse & Visual Studio.

I entered this Accident Zone due to my over-helping mentality.    Every quarter my boss will come up with a new client & a far different technology, seeing that nobody accepts the project, I will accept it & stretch myself to learn Java, PHP etc.  Later point of time, I found that company is taking me as a “buffer resource” who can work in all technologies, i became a:

“Jack of All Trades & King of Nothing”

In value aspects my 6 year career, I was paid less than a 2 year Java programmer, that too in the same company!

“So who gained, who lost?”  Clearly company gained what I lost!

So being in the wrong hands, people might exploit your helping attitude!

High Growth Scenario

If we properly take care of our career, empower the right skills, achieve 30% steady & simple growth every year like Sir. Narayana Murthy, then our career will look like this: (GROWTH & LADDER)

But, if you blindly depend on your company, work on all contradictory technologies, switch a lot between technologies, lose your mind, your career will look like this:  (SNAKE & LADDER)

After all, it is you who have to decide the aspects, that Job gives:

  1. Work Enjoyment Part
  2. Monetary Aspects
  3. Financial Freedom

My Answers

As per the promise, I am trying to put my answers against the tactical “supporting-thoughts” by deceivers:

  1. Great Programmers never insists on particular languageYes.  You are right.  But i say if they insisted on particular language, they would have been EVEN-GREATER!  For example all the Tech Authors, Tech Leads, MVPs are a result of focusing on particular technology or language.  So focus is value, focus is growth!
  2. All languages are converted to machine language for execution, so doesn’t matter .Net or Java!  I don’t know what to say for this.  I can counter it saying “All human beings are ultimately Animals with advanced brain!  Do we treat animal equal to human?” NO.. Similarly there is difference in .Net & Java.  The skill experience determines the productivity factor of .Net, so how quick the machine language is created depends on skill level, so .Net matters!
  3. You won’t forget .Net after 1 yearWe won’t forget .Net after 1 year, but the 1 year can definitely corrode the skill efficiency for sure, we won’t be sharp enough as we were 1 year before.  It requires thorough regression to get back to old foam!
  4. Java is better than .NetConsidering the latest .Net Platform, C#, Associated Technologies, I would say .Net is way ahead than Java.. Challenge >> Read this
  5. Having Java in resume will increase your valueIt can only increase value if the company is looking for hybrid-programmers, such opportunities are less in the programmer level & more in the solution architect level.  So in general case, it will not increase the value & you will get confusing calls from Java Hunters, if the keyword  Java is in your resume.

Boss’s thought

From the management side, they won’t like these points.  They prefer resource-reuse as switching technology helps with:

  1. Reduced cost as no-new java programmer is hired
  2. Improved return on existing resource as idle time of .Net programmer is avoided

In my management experience, we were happy to reuse resources, but i would be honest to tell upfront that it will reduce their career value; I do not like people coming back to me & saying i cheated them.

Boss will ask you to see things in his stand point; Programmer can ask-back to see things from the programmer stand point! 

In most cases, the switching of technology marks a permanent move as the company is not interested to get back the programmer to previous state, but in the case of idle programmer, the company would be motivated to get a .Net project to reduce idle time.

Remember one thing; some companies have tricky managers who make sure the employees won’t grow in value, so that they can use a 10 year programmer at the cost of 3 year guy!  Such leaders are temporary solution seekers, never stick to them as they are lacking humanity values.

 

Another School of Thought

In the film industry, I have observed some Actors will play role of Hero & Villain within the same year, but they won’t reach the top layer as their IMAGE is struck between multiple characters.  They do the switching due to necessity OR they wanted to enjoy different styles, sometimes being Hero for multiple movies make their life boring.  In this case switching is yielding some benefits of work-enjoyment, but definitely they are losing value.

The IMAGE of an actor determines his success leverage.  This is the reason SRK is high value in Bollywood.  If he plays the role of Arrogant Villain for 2-3 films, he is gone out of value!

 

Concluding, Switching tracks is Self-Destructive!

Summary

I honestly believe that, I have produced the solid facts against Switching-to-Java.  Switching career-path impacts future:

  1. Career Value
  2. Money Value
  3. Work Enjoyment Factor

I would say; I made the mistake years back & I would be happier if my bad-experience helped another person from repeating the same!  Btb.. i support the thought we should keep an overview of all technologies like java, iphone, android etc, but not at the cost of our career!

So, if .Net Career is a Country, switching to Java is like ATTACK on the Borders!  Apne watan ki raksha karo logom 🙂

I am open for thoughts from other programmer savvy’s.. (not managers though) 🙂

[Dev Tip] Another time usage on .NET

Noda Time is an alternative date and time API for .NET. It helps you to think about your data more clearly, and express operations on that data more precisely.

And basic using:

I was planning on converting these times to UTC/Noda Instants to prevent the need to store all the time zone info with each date in the database.

That’s fine if you don’t need to know the original time zone later on. (e.g. if the user changes time zone, but still wants something recurring in the original time zone).

Anyway, I would separate this out into three steps:

  • Parsing into a LocalDateTime
  • Converting that into a ZonedDateTime
  • Converting that into an Instant

Something like:

// TODO: Are you sure it *will* be in the invariant culture? No funky date
// separators?
// Note that if all users have the same pattern, you can make this a private
// static readonly field somewhere
var pattern = LocalDateTimePattern.CreateWithInvariantCulture("yyyy/MM/dd HH:mm");

var parseResult = pattern.Parse(userSubmittedDateTimeString);
if (!parseResult.Success)
{
    // throw an exception or whatever you want to do
}

var localDateTime = parseResult.Value;

var timeZone = DateTimeZoneProviders.Tzdb[userTimeZone];

// TODO: Consider how you want to handle ambiguous or "skipped" local date/time
// values. For example, you might want InZoneStrictly, or provide your own custom
// handler to InZone.
var zonedDateTime = localDateTime.InZoneLeniently(timeZone);

var instant = zonedDateTime.ToInstant();

[Discovery] Đi tìm giới hạn sức chịu đựng của cơ thể con người

Chúng ta đã từng được nghe kể về những câu chuyện sống sót thần kỳ của những người lênh đênh trên biển hàng tháng trời, hay bị rơi từ tầng 10 của một tòa nhà, thậm chí bị một viên đạn bắn xuyên qua não. Những câu chuyện này cho thấy sức chịu đựng rất lớn của cơ thể con người. Tuy nhiên chúng ta vẫn có giới hạn của chính mình.

“Quy tắc 3” là một trong số những lý thuyết nổi tiếng về giới hạn sức chịu đựng của cơ thể con người, đó là chúng ta không thể nhịn thở quá 3 phút, không thể không uống nước quá 3 ngày và không thể nhịn ăn quá 3 tuần. Bên cạnh đó có nhiều giới hạn khác của con người mà chúng ta chưa thể khám phá hết, như bạn có thể leo lên độ cao giới hạn nào trước khi chết vì ngạt thở, hay có thể lặn xuống độ sâu bao nhiêu trước khi chết vì áp lực nước, hay chúng ta có thể di chuyển với tốc độ tối đa bao nhiêu trước khi bị xé nát thành nhiều phần.

Chúng ta có thể không ngủ bao nhiêu ngày?

Trước đây, đã có những báo cáo ghi nhận có vụ phi công máy bay trở nên mê sảng sau 3-4 ngày không ngủ và khiến chiếc máy bay chiến đấu lao thẳng vào một vách núi, hay tác động của việc thiếu ngủ tương tự như say rượu đối với các tài xế xe tải. Điều này cho thấy tác hại rất lớn từ việc thiếu ngủ. Tuy nhiên một cậu bé 17 tuổi tên là Randy Gardner đã từng lập kỷ lục Guiness bằng cách không ngủ trong 11 ngày.

Đi tìm giới hạn sức chịu đựng của cơ thể con người

Mặc dù vậy, đã từng có vụ một người đàn ông Trung Quốc bị chết sau 11 ngày không ngủ vì xem tất cả các trận đấu của cúp Euro. Nhưng ông cũng uống rượu và hút thuốc suốt 11 ngày đó, khiến việc xác định nguyên nhân cái chết có phải do thiếu ngủ hay không gặp nhiều khó khăn. Vì lý do đạo đức mà các nhà khoa học cũng không thể tiến hành các thí nghiệm tương tự trong phòng thí nghiệm.

Vì thế, các nhà khoa học tại đại học Chicago đã tiến hành một thí nghiệm trên loài chuột. Họ làm cho chúng không thể ngủ và ghi lại những thay đổi trong cơ thể cũng như sóng não. Kết quả là tất cả những con chuột thử nghiệm đều không thể sống quá 20 ngày, cơ thể chúng xảy ra hiện tượng đốt cháy calo quá mức trong khi không hề vận động gì và vẫn được ăn uống bình thường. Các nhà khoa học cũng dự đoán cơ thể con người không thể chịu đựng quá 15 ngày mà không ngủ, mặc dù vẫn ăn uống bình thường và không hoạt động nặng.

Gia tốc tối đa có thể chịu đựng?

Kỷ lục tốc độ bay hiện nay là 11.270 km/h của NASA X-43A, chứng tỏ cơ thể chúng ta có thể chịu đựng được vận tốc rất lớn. Tuy nhiên gia tốc lại là sự khác biệt lớn, sự thay đổi vận tốc lớn trong khoảng thời gian ngắn ngủi có thể gây ra một lực khủng khiếp. Nó có thể ép nát cơ thể của chúng ta và làm tổn thương các cơ quan nội tạng bên trong.

Đi tìm giới hạn sức chịu đựng của cơ thể con người

NASA và các nhà khoa học quân sự đã phải nghiên cứu rất kỹ lưỡng vấn đề này, nhằm thiết kế tàu vũ trụ và máy bay chiến đấu, đảm bảo an toàn cho các phi công trước sức ép rất lớn khi tăng tốc với gia tốc lớn. Theo các nghiên cứu, cơ thể con người có thể chịu được gia tốc khoảng 4-8 G theo chiều dọc từ đầu đến chân, trước khi máu của chúng ta bị dồn lại hết về một phía (1G chính là trọng lực, lực hấp dẫn của Trái đất khoảng 9,8m/s2).

Còn theo chiều ngang, cơ thể của chúng ta có thể chịu đựng được khoảng 14G trước khi các cơ quan bên trong bị tổn hại. Trong khi đó cơ thể con người có thể chịu đựng được gia tốc lớn nhất là theo chiều từ trước ra sau cơ thể, vì có lồng ngực bảo vệ các cơ quan bên trong. Một thí nghiệm quân sự năm 1950 với chiếc xe trượt tuyết gắn động cơ tên lửa cho thấy con người có thể chịu gia tốc lên tới 45G theo hướng này. Có nghĩa là chiếc xe tăng tốc từ 0 – 1000 km/h chỉ trong vòng 1s. Các nhà khoa học ước tính cơ thể chúng ta sẽ không thể chịu quá 50G, lúc đó các cơ quan bên trong sẽ bị nghiền nát bởi sức ép rất lớn.

Sức chịu đựng nhiệt độ của cơ thể

Theo một báo cáo năm 1958 của NASA, con người có thể sống trong điều kiện nhiệt độ môi trường dao động từ 4 – 35 độ C. Nhiệt độ tối đa có thể đẩy lên nếu độ ẩm không khí thấp, vì lượng nước trong không khí thấp hơn thì cơ thể sẽ dễ dàng đổ mồ hôi hơn và giúp làm giảm nhiệt độ của cơ thể.

Đi tìm giới hạn sức chịu đựng của cơ thể con người

Cơ thể chúng ta có thân nhiệt ổn định ở mức 37 độ C, tuy nhiên nếu nhiệt độ môi trường làm giảm thân nhiệt, sẽ gây ra những ảnh hưởng rất rõ rệt. Nếu nhiệt độ cơ thể giảm xuống 35 độ C, chân tay bạn sẽ run lên và rất khó cử động. Tại 32 độ C, hầu hết mọi người sẽ bất tỉnh, cơ thể sẽ từ bỏ cố gắng để duy trì thân nhiệt. Hơi thở giảm xuống và rối loạn nhịp tim khi nhiệt độ còn 28 độ C. Và khi thân nhiệt chỉ còn 20 độ C, tim sẽ ngừng đập. Mặc dù vậy, đã từng có trường hợp một cô gái đi bộ trong thời tiết -20độ C và thân nhiệt chỉ còn 16 độ C nhưng vẫn được cứu sống.

Có vẻ chúng ta chịu lạnh tốt hơn là chịu nóng. Nhiệt độ cao nhất của cơ thể mà có thể duy trì sự sống là 42 độ C, vì ở nhiệt độ này các protein cần thiết của cơ thể bắt đầu bị phân hủy. So với nhiệt độ bên ngoài, ngay cả lính cứu hỏa với trang bị đầy đủ cũng chỉ có thể chịu được mức nhiệt độ môi trường lên tới 93 độ C.

Leo núi và lặn dưới đáy đại dương

Càng lên cao áp suất khí quyển càng giảm và không khí càng loãng, làm cho lượng oxy cũng giảm sút. Chúng ta sẽ chết khi nồng độ oxy trong không khí giảm xuống dưới 11%. Theo tính toán của các nhà khoa học, chúng ta sẽ không thể thở mà không có bình dưỡng khí trên độ cao khoảng 7,900m.

Trong khi đó, nếu lặn xuống dưới đáy biển mà không có những thiết bị đặc biệt, chúng ta sẽ bị thiếu oxy và chịu áp lực rất lớn của nước. Thông thường một người có thể lặn sâu xuống khoảng 18m. Nhưng kỷ lục thế giới ghi lại độ sâu lớn nhất mà con người có thể lặn xuống là 85m.

Và những giới hạn khác của cơ thể

Một người bình thường có từ 3,8 đến 5,6 lít máu. Bạn có thể mất khoảng 15% lượng máu trong cơ thể mà không có bất kỳ ảnh hưởng nào. Tuy nhiên nếu bị mất một lượng máu lớn hơn, bạn sẽ cảm thấy chóng mặt, tim đập nhanh. Khi bị mất khoảng 40% máu, huyết áp lúc này quá thấp để đẩy máu đi và tim bắt đầu loạn nhịp. Nếu vượt quá mức 50%, trái tim của bạn sẽ không thể chịu đựng được và sẽ dẫn tới cái chết.

Hơn 60% cơ thể chúng ta là nước, do đó nước rất quan trọng. Tuy nhiên uống quá nhiều nước không phải là điều tốt, mà thậm chí có thể khiến chúng ta mất mạng. Theo các bác sĩ, 10L nước là lượng nước tối đa bạn có thể uống trong vòng 1 giờ mà không làm loãng các chất điện giải trong cơ thể khiến các cơ co giật và có thể tử vong.

Độ lớn của âm thanh được đo bằng đơn vị decibel. Khoảng 30dB là độ lớn âm thanh tại các làng quê yên tĩnh, trong khi đó 120dB là độ lớn mà bạn có thể nghe thấy tại các liveshow rock. Âm thanh lớn nhất mà chúng ta có thể nghe có độ lớn khoảng 160dB, nếu âm thanh có độ lớn vượt quá ngưỡng này có thể khiến màng nhĩ bị rách. Khi âm thanh có độ lớn 200dB, các sóng âm thanh có áp lực lớn thậm chí có thể làm vỡ phổi, đẩy không khí vào các mạch màu gây ra nghẽn các mạch máu dẫn tới tử vong.

Đi tìm giới hạn sức chịu đựng của cơ thể con người

Chết vì điện giật là một nguyên nhân rất phổ biến. Nguyên nhân gây ra cái chết không phải là mức điện áp lớn, mà là cường độ dòng điện (ampe). Một dòng điện khoảng 1mA có thể gây ra một chút cảm giác tê tê, trong khi đó một dòng điện 200mA là đã đủ để lấy đi mạng sống của chúng ta. Điện trở của da người thay đổi từ 1.000 Ôm (da ướt) đến 100.000 Ôm (da khô), do đó mà mức điện áp tương ứng có thể gây chết người là 200V (da ướt) và 20.000V (da khô). Trên thực tế, chỉ 10% những vụ sét đánh trúng gây ra tử vong.

Tham khảo: livescience, dailymail, theadrenalist