Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: Learning Engineering
27 points by xel02 on July 3, 2010 | hide | past | favorite | 20 comments
I understand many people here are either from an engineering background or (like me) from a computer science background. In a lot of discussions people claim that engineering is a better background to have when it comes to problem solving.

I was wondering what are some good resources for computer scientists (or anyone) to learn the principles of engineering?




I kinda like: http://www.alankennington.com/philo/eng.html after a quick skim.

I have a computer eng undergrad degree from a solid canadian school. I cant say we were explicitly taught "engineering principles", I wish we were. We learned mostly domain-specific principles, but there are some deeper cross-domain principles that are worth learning (like the link above includes).

I would add to the above, a very central concept is the "engineering trade-off" -- there is no free lunch, etc.

Another smaller one I like is "visibility", seeing clearly into your system and its state is critical to debugging/design and clear thinking.

There are also things you kind of learn by osmosis from doing projects and in the workforce. Like, dont overestimate how hard it is to do some custom work to create something new (a good FPGA programmer or C programmer can do amazing things in a week). And also, dont underestimate how hard it is to maintain said custom work (most university projects dont give a sense of maintenance cost, the overriding cost in the real world).


I've got a B.S. in Comp Sci, and like you, heard that engineering would be a more valuable degree, so when I had the opportunity to get my masters, I got it in E.E.

I don't think there are many aspects of EE, if any, that prepare you more for "problem solving" than CS. That's not to say it's not worthwhile. EE is more difficult and broader than CS; it's also expensive and time consuming to learn it all on your own.

The nice thing about engineering is that the math is extremely similar between fields. Mechanical engineering uses a lot of the same techniques that electrical engineering does, as many of the principles are the same (stability is important in both).

You can use a lot of your CS skills to do engineering experiments. There are a lot of EE fields that are nearly all done in software now. Software Radio is a big one and Digital Signal Processing is another.

So, get an introductory Circuits textbook and learn the math. Learn differential equations. Play around with robots and try to get them to do things extremely accurately; this will introduce you to control systems.

Also, learn to love math and be able to read and understand formulas and equations with a lot of Greek letters.


I'm not sure whether one can say that EE is harder than CS, or vice versa. For starters, which subfields of EE and CS are you comparing? If, for CS, you pick Theory of Computation, Algorithms, or Machine Learning, then those are pretty difficult fields. If you pick programming languages, databases, or user interface design, those are "easier" than the aforementioned (although still challenging in their own right).

In EE, if you pick some of thee classes that Stephen Boyd [http://www.stanford.edu/~boyd/] teaches at Stanford, I would imagine those are difficult.

How much more difficult is convex optimization than complexity theory? I'm not sure, but I don't think one's necessarily easier than the other.


I can only speak from my own experience but in general I found EE to be much more challenging, particularly in the sub-fields like DSP that involved a lot of probability.

I think what makes CS more tractable is that the theory is easily testable and you can write a program and see things work. Many times when you're working with signals and antennas all you have is the theory and there's very little you can do to visualize what's actually going on, not to mention working in the analog domain always throws you some surprises.

Never in CS will you hear "Well that's due to relativistic effects."

Additionally there's the practical problem in EE that you rarely encounter in CS of actually building physical things. How many times has a program given you bad results because someone somewhere turned on the microwave? :-)


Learn by doing, taking things apart, exploring. A good school helps too. And legos.. I'm not sure it matters whether you're an EE, or SE, or CS major. It hasn't in my experience, I know crappy engineers from each faith as well as good ones.


I'm a VP of IT at my company and I have an Aerospace Engineering degree. The only distinction that I can say between problem solving with an engineering background versus a CS background might be the breadth of the tools you have to solve your problems. Many times, I noticed programmers do a great job of solving problems, but they are only able to use the languages they know best to solve them. As an engineer, I felt that I was, mentally, more free to solve problems with out-of-the-box ideas. I don't believe there is a book or write-up that can help you there though, other than experience and the willingness to open up your mind and research solutions outside of your normal expertise.


heh, I'm exactly the opposite. I was a physics engineering major with an emphasis on electrical and materials engineering before I switched to more computer-sciency stuff for graduate school.

Having seen both sides, I don't think either discipline prepares you more for problem solving more than the other. It's all about your mindset.

What I will say though is that engineering problems are rooted in practical issues. e.g "This suspect is approaching security, do we have a machine that can spot them far enough away to interrogate them safely?" Science problems by contrast are more concerned with the phenomena, e.g "Does the suspect reflect enough light for our detector to pick them up at extended ranges given atmospheric turbulence?"

tl;dr If you want to be a good engineer, seek out everyday problems and solve them practically with a given budget and timeline. If you want to be a good scientist, learn to ask better questions.


For my major (Biomedical Engineering) we had an intro to engineering class that did a pretty good job of laying down some basics. It was taught using a chemical engineering book (which I won't actually recommend) and we spent the lectures learning how to do mass/momentum/heat/energy balances using Chem E block-flow diagrams (http://en.wikipedia.org/wiki/Process_flow_diagram).

Then there were the tests. How would you lift an elephant? How many liters of syrup are used in a Waffle House each day? Design a dishwasher. Explain why you think implanted blood glucose meters are difficult to design. All in an hour and with demands for equations, pictures, assumptions and models. These aren't just Fermi Questions.

You couldn't study for it. You were graded like a kindergartener for "points achieved" instead of percentage correct and yet you still somehow failed the tests all semester long.

But at some point during the semester you start to enumerate assumptions, apply math as a tool to create and communicate an engineering model of the world, and then make designs and conclusions with error bounds and a good understanding of your personal confidence in them. It was pure survival-motivated.

In short, the class did exactly as advertised and we took one step closer to thinking like engineers. I'm not sure that CS degrees cover something like that, but I'm curious to know if I'm wrong.

So try that kind of thing. You're already used to modeling (building) information processes. See how good you can get at building/modeling/analyzing physical processes. Not knowing things won't hold you back from learning the philosophy. It'll just make you less accurate.


What I have to say is probably more of a meta-response -- a few things to think about / look for when you're learning.

One of the first things I was told when beginning my E.E. degree was that I'd be _learning how to learn_. Many years later (after obtaining a master's), I see that it is true.

Others here have stated, and I agree, you need to try doing stuff. There seem to be two sides to engineering: understanding/developing theory, and implementing it. Both are worlds unto themselves.

Also, learn the tool of the trade: Math. Even if you don't learn a particular subject, at least familiarize yourself with it enough to be able to later on say to yourself "hey, I think this type of math is what I need to solve this problem" then go and learn it.

(And, relating back to doing things, try looking at example problems and connecting the concepts involved to their equational counter-parts -- this will make connecting the math to the context easier when you try to come up with solutions or understand something else).

I'd recommend starting out with these branches:

Differential Equations - as most physical systems adhere to these types of rules

Linear Algebra - as this is useful for taking differential equations and turning them into computations a computer can perform (via state-space) as well as many many other things -- I've found a lot of the ideas I learned from linear algebra were helpful in understanding other branches of math, such as differential equations (e.g. basis vectors/functions)

and

Laplace/Fourier Transforms - lots and lots of engineering will look at things in different domains (esp. these two), so it'd be a good idea for you to get used to doing that.

Again, the best way to learn this stuff is by doing.

[EDIT: Grammar]


I can only speak from a more physical engineering (ME) persspective but the best way to become better at problem solving is by solving problems. To add to that you must also continue to solve harder and harder problems to improve at a steady pace.



I'm going to give you an unpopular answer, but as an engineer I have enough credence to say this:

You cannot become an engineer or learn engineering without going to college to become one.

You have to understand: engineering is far different from computer science. Even computer engineering — which is my field. It's a field that you can't practice in without a degree. It's not like computer science where you can get a job programming without a degree. No engineering firm will even consider you without a degree.

And that's because engineering requires formal training from certified teachers according to a standardized curriculum. The skills, thought processes, problem solving strategies and specific knowledge of the individual engineering fields is highly tailored. And, most importantly, extremely arduous. If an engineer has ever scoffed at your degree in college, it's because compared to his workload — no matter your degree — you have an easy time. (Because of this, we're also all arrogant :)

But, to answer your question: the best place to learn the principles of engineering is in an engineering class. In fact, it's the only place. Even if you read online articles or textbooks, you won't ever get the full engineering perspective. Only professors, uniquely qualified to endow the sacred profession, can teach the principles.

If you're currently studying CS at school, I highly recommend sitting in an introduction to engineering class. Speaking from experience, engineering has helped me immensely in computer science. I'm a much better programmer from the problem solving skills I learned in my engineering classes.

I hope this helps. Engineering is such a wonderful major, and I love every minute of it. Good luck!


I was CS for undergrad, but my school had everyone take an intro-to-engineering-principles class that used digital signal processing (DSP) as the domain. There are pros and cons to that, but it provides one view on a lot of things that come up in many areas of engineering: mathematical modeling (and validating and knowing the limits of mathematical models), analyzing systems in frequency and time domains, different tools for characterizing the aggregate response of systems (resonant frequency, impulse frequency response, etc.), different ways of visualizing or analyzing the behavior of systems (mostly in Matlab), solving mathematical models in reverse (e.g. finding a physical system that will produce the desired behavior), and so on.

There are a bunch of good DSP introductions, and it's a useful thing to know in itself, so I think you could do worse than working through one of them.


My advice for learning CS, from someone who is completely self-taught, learn ad hoc and strive to completely understand - trying to just understand stuff built on top of other things without understanding the bottom layer is not very good for learning.


Principles of engineering is machine building. Then, it takes off as your interest. The funda of Machine building in Computer engineering is called Automata Theory. So, you can start with Formal Language and Automata. That along with mathematics forms the principle of any form of engineering.


Lego.


This is actually not far from the truth. Engineering is an art and a science, and you can only get better at the art part by doing (the science can be taught, and then reinforced by 'doing' as well).


MIT OpenCourseWare - ocw.mit.edu - has a lot of engineering courses.


So does Berkeley - in fact Berkeley seems to have more core-engineering courses on the web and iTunes-u than anyone else.


And Stanford even has iPhone Programming classes. But MIT was the one who started it all, so some credit is due.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: