Kids these days...
Tags: Embedded, Programming, School
Recently I've noticed an increasing amount of questions in several LinkedIn groups I joined regarding people new in the field asking questions which are easily found using a basic internet search. Furthermore, we have students and others ask questions with regard to degrees and experience in the field. After replying to dozens of posts like that, I thought it would be good to condense the information spread across several groups into one blog post as a reference for future questions.
While the groups in question are particularly focused on embedded engineering, operating systems and software engineering, I assume similar posts are present in other groups. Hopefully, some will find their way to this blog and find the information in this post useful. I'm sure this phenomenon isn't limited to LinkedIn groups either...
LinkedIn is the only 'social network' I actually see a use for, and use myself (no, I don't have a FaceBook account and never will). The idea of having a highly specialised group where members can discuss the latest and greatest in their field, or are able to ask in depth questions to others is of great value. Unfortunately, we've seen an influx lately of people asking elementary questions which can easily be found using a quick Google search. Some examples, taken verbatim:
"LINUX O.S has become more usable these days! Can u use LINUX for embedded development! How to port it onto contollers..?"
"what is call back fucntion ?? and it has any relation with Recursive function??"
"what are the use of Global variables??"
"Wrapper Function? What are wrapper functions? How we write them in " C-Language " ?"
"Is iostream header file compatible on MinGW compiler? How can I use cout and cin using this compiler"
"hello friends, help me .. how to port ML401/ML 402/ML 403 vertex family of FPGA in Linux????????/ Thanks in Advance"
"hello every one i m new in samba server any one help me plz ""Warning: You have some share names that are longer than 12 chars"" in samba server"
"Is there is any difference between embedded c and inline assembly ?"
"What is full form of GCC ? Please anybody answer?"
"At what time does the shared libraries play their role..? Is it the execution time..?"
"What is the basic use of void pointer? Or application of void pointer."
"In Apache httpd.conf file ,What is the use od ProxypreserveHost,proxypass and ProxypassReverse?"
"How do I connect a VMware workstation to the internet? in redhat 6.0"
"hello friends.... i am doing embedded cource ... how could i search a job? i need ur help."
These are sadly just a few of the more recent ones...
Besides the bad spelling and grammar, the vagueness of some questions and ease with which answers to these questions can be found using any search engine. I wonder what the objective is of people asking these questions in a professional forum.
- Do they know what made them post these questions on a professional forum instead of just typing them into Google?
- What do they hope to achieve by posting these questions there? Do they realize that they just put themselves on 'do not hire' lists?
- Often, they list on their profile they have an advanced degree from a certain University. Do they realize that, by posting these kind of questions, they just decreased the value of their degree? And even possibly their school?
My guess is they don't, even though this should be common sense. I believe that some of this behaviour can be explained within my current gripe with education: too much rote learning, no engineering. Students do not need critical thinking, no analytical mind, they are just focused on getting grades through regurgitating memorized crap and cheating/plagiarism where possible.
Within engineering, schools and educational programs should focus on the concepts and principles, not the implementation, or programming language of the week, or memorizing stuff. Let me use an analogy here. In arts, painters focus on colour composition, form, capturing light, etc. The focus is not on what particular paint to use, or canvas. The canvas and the paint won't make the painter, they are only the tools. Plus, the actual techniques learned can be readily adapted to digital media, etc.
Same in engineering, the programming language is only a tool, like a sculptors' hammer and chisel. There is no problem in using a random language during the education (although I'm a staunch supporter of C as a first language, with some assembly as well), since the principles of programming remain the same. Switching from C to for example Java is pretty easy if you understand the principles of Object Oriented programming. The rest is purely syntax.
The important aspects schools should focus on are the ones that don't change at all. Principles of hardware architecture, algorithms, data structures, design rules, operating system principles like memory management, task scheduling, real time principles, file systems, etc., etc., ... These have been pretty much the same ever since the the beginning of the field, and a thorough understanding of these is what makes a good engineer - not the skills in a particular language or IDE.
To the posters of such questions: to start, refrain from using short hand 'text-mode' comments, and if you know your English isn't native, please use a spell checker. It will make your posts a lot easier to read and professional. Remember, you're not sending an SMS to your friend, but you're trying to communicate on an international professional forum! Take the time to explain your problem, be verbose, and don't try to sound like you 'demand' anything...
Following these, a lot of people ask about experience. They want to know what certifications they need and what degrees they should go after. While the degree itself can open some doors that would otherwise remain closed, it is not the be all end all to getting a good job.
My advice: don't bother with certifications; instead, learn new skills on your own and make sure others can find what you're doing/learning. For example, build up a couple of projects with enough variety between them, say something about operating systems, network protocols, etc. and blog about them.
You can get experience even while you are still at university. You can even do so in multiple ways - just two of them:
- Join an Open Source project. There are plenty of both high and low profile projects that are desperate for people. Start out with writing documentation (something you will be thanked for since no one wants to do this :) and bug fixes. Just go through the bug list and start picking at it one by one, submitting patches, and work your way up from there. Putting these on your CV gets you the experience and it is very easy for potential employers to verify your skills.
- Build up experience on your own, and don't keep it to yourself. Blog about it, write tutorials, write articles for on-line magazines, etc. You can pick up cheap ARM embedded boards on eBay or from companies like https://www.olimex.com/. (don't let their website fool you - they are really nice and have some great kits!). The development tools are freely available, and everything else you need to know is on the net.
Turn programming into a hobby and learn new skills whenever you can. Keep a blog, write tutorials, make video's showing howto's etc. In other words: become visible when I Google your name with more than just your FaceBook page. Become active in forums dealing with specialized topics in your field, for example if you're active with Renesas micro-controllers, join http://renesasrulz.com/ and similarly, other forums for other vendors.
Diversify. Don't just limit yourself. Pick up toolkits, do some web programming, learn how to use databases, look into network protocols, learn (real-time) operating systems internals, learn about sensors and other hardware like motor control and PCB design, etc.
The degree does not matter once you reach a certain level of experience. The degree can help get you the required experience, so do aim high - for at least a bachelors and afterwards a masters in the field. In the end though, it will be your skills that count and not your degree; and no-one can teach you the skills in a classroom. I try to explain this to my students all the time. You can take as many programming classes as you want and pass all of them with high grades, but that will not mean that you are an expert at programming. It just means that you know the basics of a language and understand the concepts. From then on, it's up to you.
As mentioned before, you should focus on developing the required skills on your own. Don't become a degree/credit/certificate hunter. Develop your skills by building up your own 'portfolio' of projects you did in your spare time. Don't limit yourself to just typical embedded subject, but learn stuff like databases (after all, the measurements you take with a sensor will end up into one at some point), some all round SDK's like Qt (who knows you might have to develop some desktop GUI that interacts with your embedded system), network stacks and protocols, Linux and other operating system internals, etc., etc., etc.