University curriculum should not focus on teaching programming languages. It should focus on teaching programming and computer science fundamentals in general. Languages are just a means to implement the theory.
Now lets talk about what students should know:
- Basic programming principles. Loops, conditions etc.
- Algo and Data Structure.
- How a computer program is executed internally.
- Compilation process
- OOP
- Programming paradigms: Static typing, dynamic typing, Functional, Interpreted, Compiled, etc.
Now lets see try to come up with the smallest set of programming languages to cover all these topics.
1) Python -> Learn programming, algo, etc
2) C -> Learn execution of program, pointers, internal details.
3) Java -> OOP, static typing, compiled etc.
4) Haskell -> Functional.
I think checked exceptions are great. When using a library you instantly know what all bad could happen while calling a function and retry/handle on specific exceptions. For example, when reading a file if you get something like a FileNotFoundException, you can treat it as a fatal case or can simply move to process the next file. This provides a lot more clarity to code and resonates with the static type safety paradigm of java.
I think that a common criticisms is that in many cases, regardless of whether the exception is checked or unchecked, there is little the process will do but give up.
Because this is common and sensible, the code ends up with either many exception handlers that convert checked to unchecked or add the exception to the calling method signature which propagates the problem up that call stack
Checked exceptions are great in some cases. They are huge annoyance in others. The complaint is that the language does not provide tools to separate these cases - you can't just say "this method doesn't handle exceptions, pass it up" or "ok, now I want all exceptions to be handled, so tell me if I forgot something". It does not give the programmer control. Java has excellent facilities to make it happen - annotation, static analysis tools, extensive array of code checkers - but all this has to bow to the built-in mechanism which is crude and inflexible.
I hate to see that I need to login just to take a demo of your product. I find it a bad approach. First let the user checkout your product without intrusion.
Oh man no Java lovers here. I believe with the entry of Spring boot and Spring roo project which provide scaffolding and convention over configuration model, this just might be able to compete with RoR ecosystem in terms of speed and robustness.
You seem to be a well conditioned Amazonian because you possess the same nature of dismissing concerns instantly rather than accepting that something is probably wrong and needs to be fixed.
If people have complained on similar lines throughout on Hacker news or NYC article or other sources, that means there is a pattern. Maybe you have been fortunate enough to not have experienced some of the misery faced by others, but please follow amazon's most important principle of being data driven and think about it.
One sometimes-unfortunate thing about the Internet and global accessibility to other peoples' opinions is that it's easy to find other people "just like you". This leads to a signal amplification that doesn't necessarily mean the problem is as bad or as far-reaching as the group would have you think. It certainly can be, but concluding that from a limited news sources with unspoken agendas isn't accurate. We can all get in a huddle and complain about things, but there is a non-small number of people who just ignore it--even though they would have a positive counter-argument to offer--and instead go on about their business because they don't want to get involved.
Remember that when you're reading the news (here or elsewhere, since rarely is news generated on HN) you and your outrage are being used for marketing (and possibly furthering some other agenda).
I agree with your closing sentence about being data driven and thinking about it--getting out of the news bubble and using your own brain to analyze something is good.
I have worked in Amazon for many years now in India. Jeff himself doesn't seem interested in taking work culture seriously. I have never seen any interviews of him after NYC article where he accepted that something was going wrong and needs to be fixed. Instead he turned the whole debate into work-life harmony rhetoric.
In India, the situation is far worse than US. There is less transparency and more opportunities by senior leadership to rule with an iron fist without any accountability. Concerns are suppressed instantly. One might have been an excellent employee for couple of years but for some reason if you are not on top of your game for even a quarter, you will start hearing complains from everyone and the situation can go upto PIP (Performance Improvement). The culture completely lacks the emotion of "Let me help you". It is heavily influenced by politics and survival of the fittest which might be fine for a small period but takes a toll on you in long term. Probably this explains why attrition is so high in Amazon.
Working for Amazon in India is almost like working for an entirely different company and is not a great comparison to working for Amazon in the US.
Cultural norms in the US apply in the US; cultural norms in India apply in India. I've generally found Indian managers and developers to approach the work entirely differently than their US counterparts. Not a negative--just an observation.
There does seem to be a pervasive undercurrent of "if I do good work on my team here in India, I can get out of here and go to the US as soon as my promo goes through". This sentiment naturally comes out in behaviour on teams and around coworkers.
Now lets talk about what students should know: - Basic programming principles. Loops, conditions etc. - Algo and Data Structure. - How a computer program is executed internally. - Compilation process - OOP - Programming paradigms: Static typing, dynamic typing, Functional, Interpreted, Compiled, etc.
Now lets see try to come up with the smallest set of programming languages to cover all these topics. 1) Python -> Learn programming, algo, etc 2) C -> Learn execution of program, pointers, internal details. 3) Java -> OOP, static typing, compiled etc. 4) Haskell -> Functional.