Yes, the FPGA section of the market has reasonably priced tools. I bought the Xilinx Spartan 3 starter kit for $99. Includes a nice little FPGA board for prototyping.
And yes, I use open source simulators (GHDL for VHDL and Icarus for Verilog) and I'm trying to get the Xilinx Webpack (version 7.1) running under Linux (though it seems they have quite a lot of problems in their Linux version) even now. (BTW: Can I get a job?)
However, the tools used for ASIC design are not free. Of course, FPGAs are moving into the ASIC market, but FPGA tools will have to improve quite a lot (I've run into several bugs in Xilinx's ISE).
Tougher to outsource? I don't think so. Most hardware design is done very much like software design these days using HDLs. It's just as easy to send a VHDL/Edif/GDSII file around the interent as it is to send a C/C++/Java file (OK, the GDSII file will likely be the size of a movie, but that's no big obstacle anymore).
There has even been some discussion on some hardware design forums that the EDA companies (Electronic Design Automation - they make the software used for designing hardware) are charging much less money for their tools in places like India and China than they charge here. We're talking about tools that cost $100K or more here in the US going for much less in India and China. Companies that buy this software are taking notice and settup up design centers overseas so they can not only save on labor, but also on software costs.
Lots of hardware engineers were laid off during the current downturn which started in 2001. And many have had a hard time finding work during this period.
The thing to consider with hardware engineering is that if you have been laid off it's much more difficult to keep up your skills up to date than it would be with software design. Hardware design tools tend to be proprietary (especially the ones used in industry) and they cost as much as a home mortgage, so you're not going to be going out and buying some EDA package so you can keep up your skillset. Sure there are some open source HDL simulators like Icarus and GHDL, but most hiring managers in hardware design will probably not have heard of them or they consider them toys (a false perception, of course, but hiring managers don't know this;-). And when it comes to logic synthesis tools there's not a lot much out there that's open source.
If you get laid off from a software job you can easily go and start (or work on an existing) open source project to keep your skills up to date since there are lots of highly regarded open source (free) tools and languages out there to use.
Industry always needs more Software engineers than hardware engineers. Also, software engineers can probably live in more different geographical areas than hardware folks (most hardware design is done in 3 or 4 geographical areas in the US - Silicon Valley being the largest center for hardware development) so that's something to keep in mind.
That said, there aren't as many hardware engineers as there are software engineers so the talent pool is smaller to match the smaller job pool. Hardware jobs can tend to pay more as well. But it's not true that hardware engineers are immune to downturns - lots of hardware engineers lost jobs during the last (still current?) downturn that started in 2001. Also, outsourcing is effecting Hardware folks just as much as it is software folks, so you won't really find any relief there.
If you know both hardware and software and are reasonably competent at both, that can open some doors, however as someone who is in that situation I can tell you that it's difficult to find hiring managers who see that (being competent in both hardware and software design) as being an advantage because usually they are either harware people or software people themselves. There are some jobs out there, though, where it is a distinct advantage - the problem is they are definately much more difficult to find than your average IT job (but the challenges are generally much more interesting than you will find on your average IT job as well)
Also, as someone who is currently working on a Masters degree in ECE (Electrical and Computer Engineering) I would really like to see more mixing between the CS and ECE departments. I really think the barrier between the two is rather artificial these days. You can design chips or you can design software to design chips (I'd much rather do the latter as it seems more challenging to me - once you design a couple of chips you've got a pretty good idea of how most of your future projects will be, but designing software to design chips offers much more variety). To design software to design chips you need to know a lot about both hardware design and software design & algorithms (you really need to take a compiler class, for example), but the University that I go to really limits the number of CS courses (I think you can take up to 2) that you can take as electives in the ECE program - it really doesn't make any sense.
I bought a USB Flash drive (512MB) last summer and carried around with me everywhere (school, work, home) to transfer files. Of course I was always worried about losing it or having it break in some sort of unfortunately accident.
Now I just use GMail to make my files available everywhere. No worries about losing it. No worries that it'll break (well, I suppose a big quake in CA might do that...) and 2GB of storage.
I think that since we've paid for that data through our taxes we should get to see it for free.
There are several reasons why NOAA exists, but one of them is to protect the public: think tornados and hurricanes. The public deserves to see that data.
most (current) innovation and technology growth is in India.
Well, I don't think most current innovation is in India _yet_. However this kind of move will certainly help India since they will be free to develop software without having to have to worry about lawsuits.
The ironic thing about software patents is that while their proponents suggest they will help foster innovation, in fact they have the opposite effect and end up only helping to employ IP lawyers instead of engineers.
But most 'old-school' outfits using heavy waterfall processes think that prototyping is evil if you do any of it prior to writing your 50 to 100 page 'design document' (I worked at a place like this a few years back).
Of course the company that uses Agile processes and encourages prototyping will probably get to market way before the dinosaur company.
It ended up a game of "make the diagrams the customer wants, then make much simpler and more sensible ones for yourself that don't follow proper software engineering protocol but actually tell us how the darn thing works."
Actually sounds like you learned your lesson well.
There's usually a very defined and rigid format for every design document and the writers have obviously tried very hard to make sure that procedure has been followed
Exactly. I used to work at a company that had a 50+ page document that was supposed to be used as a template for design documents - a sort of meta-design document, I suppose. Problem was that things rarely fit into their preconceived ideas. It definately led to unreadable documents. The other problem was that the procedure to change the design document was so draconian that everyone was hesitant to change anything even though it would become clear that things needed to be changed when the real world crept in. (BTW: this company allowed absolutely no prototyping prior to finishing the almighty design document - for those of us who like to prototype, it was frustrating)
I'm thinking that wikis are the best way to both communicate and develop a 'design document'. The design document should be flexible and wikis fit the bill. The design document should show the history of thinking about the design and again, Wiki's fit the bill quite nicely as you can look back and see the discussions that took place that led up to various decisions.
What's wrong with reverse engineering? In the past it's been considered legal if it is done in a 'cleanroom' type environment, meaning that none of the participants had or have any connection with the company that originated the format (in this case Microsoft).
Of course laws like the DMCA cast some legal doubt on some reverse engineering... But ethically it seems just fine.
Instead of having to fiddle with the clocks twice a year due to some holdover thinking from a more agrarian era... Why not just change our time to 1/2 hour between standard time and daylight saving time?
Since we're currently on DST the idea would be to move our clocks back 1/2 an hour (in the fall as usual) and then leave them there from here on out. No more stupid switching our clocks foward/back twice a year to give us an illusion of having a longer day.
"But what about the chiiiillldren?" I hear you saying. Let the chiiiillldren go to school at a reasonable hour like 9AM - many highschools are starting to do this anyway so their students can get more sleep and learn better.
Arizona has the right idea: they don't mess with their clocks.
the attr_* methods are not syntactic sugar. They are methods defined on class Class (or maybe it's class Module, now I'm not so sure). I'm even pretty sure they weren't in Ruby initially. Someone wrote the methods and said "hey isn't this cool and doesn't it save a lot of typing!", matz liked it and included it (I believe that's how it happened, but I could be off).
my_while looks like a natural extension of the language. I'm sure you could duplicate this function in Python, but it wouldn't look like a natural part of the language.
But the lack of a usable lambda feature in Python would mean that you can't pass around significant code blocks like you can in Ruby (and there are also the syntactical issues which would make it difficult in Python). Python folks always seem to minimize the importance of this Ruby feature, but in practice it is very useful/powerful and it can lead to very natural looking DSLs in Ruby.
there's nothing at all in Python the language that'd prevent a similar project, although the implementation would be pretty different.
I'm sure it would be possible in Python. But as you say the implementation would be very different (and perhaps I could even add that it would be much more difficult and it would probably require a significantly larger code base).
Oh, of course you are. Might as well just admit it.
As far as Ruby vs. Python features go: 1) code blocks. Ruby lets you pass code blocks around. Sounds pretty dull, eh? But in fact it's what makes it possible to create Domain Specific Languages in Ruby quite easily without needing to create a special parser. In many ways Rails can be thought of as a domain specific language built on Ruby. 2) classes are always open in Ruby(including the Class class). By 'open' I mean you can always add new methods to a class (or even a particular object). Another feature that makes it easy to create DSLs 3) continuations. (Not that Rails makes use of them, but some other Ruby-based web programming frameworks do) 4) Ruby has true lambdas. AFAIK Python's lambdas are pretty limited (limited to one expression?)
Also, can you embed Python in HTML? (seems that the whitespace issue would cause a lot of problems with doing that)
I'm just looking for the practical solutions...
Give RoR a try. You might just find that it'll do everything you need it to do now without needing to wait around for a Python-based clone. What could be more practical?
Another is, how easy is it to find developers with applicable skills? If an organization commits to Ruby and their Ruby developer leaves, how hard will it be to find a suitable replacement?
(raises hand) Pick me! Pick me!
Seriously, I've been programming in Ruby for a few years now (sometimes even getting paid to do it). It's so much nicer working in Ruby and there are quite a lot Rubyists out there who would love to get paid to develop primarily in Ruby.
Also, anyone who knows Perl, Python or even C++ should be able to pick up Ruby in a week. Companies are often too concerned about findind someone with an exact skillset that they overlook a candidate's growth potential.
You count getter setter methods? You know that they can be produced lets say in 3 seconds with any modern Java IDE..
Good point about the getter/setter methods. To which I reply: You know they can be generated for you if you use a modern language like Ruby.
class Foo
attr_accessor:bar,:baz,:foo
end
Now the class Foo has accessor methods (getter and setter) for the instance vars bar, baz and foo. A total of six methods were created from that one line of code. No need for a 'modern Java IDE' - vi or emacs work fine. You want read-only access? Use attr_reader then only the getter methods will be created.
This is probably why the method count for Ruby in the article was significantly less than for the Java version.
Yes, the FPGA section of the market has reasonably priced tools. I bought the Xilinx Spartan 3 starter kit for $99. Includes a nice little FPGA board for prototyping.
And yes, I use open source simulators (GHDL for VHDL and Icarus for Verilog) and I'm trying to get the Xilinx Webpack (version 7.1) running under Linux (though it seems they have quite a lot of problems in their Linux version) even now. (BTW: Can I get a job?)
However, the tools used for ASIC design are not free. Of course, FPGAs are moving into the ASIC market, but FPGA tools will have to improve quite a lot (I've run into several bugs in Xilinx's ISE).
Phil
Jobs: "OK I need about a million volunteers: 1) Cross out the 'Tiger' on the box 2) Write 'Big Orange Cat with black stripes' "
Tougher to outsource? I don't think so. Most hardware design is done very much like software design these days using HDLs. It's just as easy to send a VHDL/Edif/GDSII file around the interent as it is to send a C/C++/Java file (OK, the GDSII file will likely be the size of a movie, but that's no big obstacle anymore).
There has even been some discussion on some hardware design forums that the EDA companies (Electronic Design Automation - they make the software used for designing hardware) are charging much less money for their tools in places like India and China than they charge here. We're talking about tools that cost $100K or more here in the US going for much less in India and China. Companies that buy this software are taking notice and settup up design centers overseas so they can not only save on labor, but also on software costs.
They [hardware engineers] never get laid off
;-). And when it comes to logic synthesis tools there's not a lot much out there that's open source.
You're obviously not living in the real world.
Lots of hardware engineers were laid off during the current downturn which started in 2001. And many have had a hard time finding work during this period.
The thing to consider with hardware engineering is that if you have been laid off it's much more difficult to keep up your skills up to date than it would be with software design. Hardware design tools tend to be proprietary (especially the ones used in industry) and they cost as much as a home mortgage, so you're not going to be going out and buying some EDA package so you can keep up your skillset. Sure there are some open source HDL simulators like Icarus and GHDL, but most hiring managers in hardware design will probably not have heard of them or they consider them toys (a false perception, of course, but hiring managers don't know this
If you get laid off from a software job you can easily go and start (or work on an existing) open source project to keep your skills up to date since there are lots of highly regarded open source (free) tools and languages out there to use.
Industry always needs more Software engineers than hardware engineers. Also, software engineers can probably live in more different geographical areas than hardware folks (most hardware design is done in 3 or 4 geographical areas in the US - Silicon Valley being the largest center for hardware development) so that's something to keep in mind.
That said, there aren't as many hardware engineers as there are software engineers so the talent pool is smaller to match the smaller job pool. Hardware jobs can tend to pay more as well. But it's not true that hardware engineers are immune to downturns - lots of hardware engineers lost jobs during the last (still current?) downturn that started in 2001. Also, outsourcing is effecting Hardware folks just as much as it is software folks, so you won't really find any relief there.
If you know both hardware and software and are reasonably competent at both, that can open some doors, however as someone who is in that situation I can tell you that it's difficult to find hiring managers who see that (being competent in both hardware and software design) as being an advantage because usually they are either harware people or software people themselves. There are some jobs out there, though, where it is a distinct advantage - the problem is they are definately much more difficult to find than your average IT job (but the challenges are generally much more interesting than you will find on your average IT job as well)
Also, as someone who is currently working on a Masters degree in ECE (Electrical and Computer Engineering) I would really like to see more mixing between the CS and ECE departments. I really think the barrier between the two is rather artificial these days. You can design chips or you can design software to design chips (I'd much rather do the latter as it seems more challenging to me - once you design a couple of chips you've got a pretty good idea of how most of your future projects will be, but designing software to design chips offers much more variety). To design software to design chips you need to know a lot about both hardware design and software design & algorithms (you really need to take a compiler class, for example), but the University that I go to really limits the number of CS courses (I think you can take up to 2) that you can take as electives in the ECE program - it really doesn't make any sense.
The era of the flash drive may be short lived.
I bought a USB Flash drive (512MB) last summer and carried around with me everywhere (school, work, home) to transfer files. Of course I was always worried about losing it or having it break in some sort of unfortunately accident.
Now I just use GMail to make my files available everywhere. No worries about losing it. No worries that it'll break (well, I suppose a big quake in CA might do that...) and 2GB of storage.
I think that since we've paid for that data through our taxes we should get to see it for free.
There are several reasons why NOAA exists, but one of them is to protect the public: think tornados and hurricanes. The public deserves to see that data.
most (current) innovation and technology growth is in India.
Well, I don't think most current innovation is in India _yet_. However this kind of move will certainly help India since they will be free to develop software without having to have to worry about lawsuits.
The ironic thing about software patents is that while their proponents suggest they will help foster innovation, in fact they have the opposite effect and end up only helping to employ IP lawyers instead of engineers.
. . . is a prototype.
Exactly!
But most 'old-school' outfits using heavy waterfall processes think that prototyping is evil if you do any of it prior to writing your 50 to 100 page 'design document' (I worked at a place like this a few years back).
Of course the company that uses Agile processes and encourages prototyping will probably get to market way before the dinosaur company.
Then burn it.
Amen.
It ended up a game of "make the diagrams the customer wants, then make much simpler and more sensible ones for yourself that don't follow proper software engineering protocol but actually tell us how the darn thing works."
Actually sounds like you learned your lesson well.
There's usually a very defined and rigid format for every design document and the writers have obviously tried very hard to make sure that procedure has been followed
Exactly. I used to work at a company that had a 50+ page document that was supposed to be used as a template for design documents - a sort of meta-design document, I suppose. Problem was that things rarely fit into their preconceived ideas. It definately led to unreadable documents. The other problem was that the procedure to change the design document was so draconian that everyone was hesitant to change anything even though it would become clear that things needed to be changed when the real world crept in. (BTW: this company allowed absolutely no prototyping prior to finishing the almighty design document - for those of us who like to prototype, it was frustrating)
I'm thinking that wikis are the best way to both communicate and develop a 'design document'. The design document should be flexible and wikis fit the bill. The design document should show the history of thinking about the design and again, Wiki's fit the bill quite nicely as you can look back and see the discussions that took place that led up to various decisions.
"Look, even Linux Torvalds supports our right to innovate!"
What's wrong with reverse engineering? In the past it's been considered legal if it is done in a 'cleanroom' type environment, meaning that none of the participants had or have any connection with the company that originated the format (in this case Microsoft). Of course laws like the DMCA cast some legal doubt on some reverse engineering... But ethically it seems just fine.
Instead of having to fiddle with the clocks twice a year due to some holdover thinking from a more agrarian era... Why not just change our time to 1/2 hour between standard time and daylight saving time?
Since we're currently on DST the idea would be to move our clocks back 1/2 an hour (in the fall as usual) and then leave them there from here on out. No more stupid switching our clocks foward/back twice a year to give us an illusion of having a longer day.
"But what about the chiiiillldren?" I hear you saying. Let the chiiiillldren go to school at a reasonable hour like 9AM - many highschools are starting to do this anyway so their students can get more sleep and learn better.
Arizona has the right idea: they don't mess with their clocks.
Troll? Boy, those Apple lawyers are serious! An hour ago this was rated '3 Funny'. Someone doesn't have much of a sense of humor.
The third camera records Cousteau's behavior inside the sub.
Is this one there so they can make a documentary about marine biologists at the same time as they make the one about the sharks?
...are now moving in your direction.
Syntactic sugar is nice
the attr_* methods are not syntactic sugar. They are methods defined on class Class (or maybe it's class Module, now I'm not so sure). I'm even pretty sure they weren't in Ruby initially. Someone wrote the methods and said "hey isn't this cool and doesn't it save a lot of typing!", matz liked it and included it (I believe that's how it happened, but I could be off).
def func():
def my_code_block():
print "Hello, World!"
return my_code_block;
f = func();
f();
Of course. You're basically passing around a function reference. That's not what I'm talking about.
What Python doesn't have is nice, clean, anonymous code blocks
That's what I'm talking about. In Python you can't do something like this:my_while looks like a natural extension of the language. I'm sure you could duplicate this function in Python, but it wouldn't look like a natural part of the language.
But the lack of a usable lambda feature in Python would mean that you can't pass around significant code blocks like you can in Ruby (and there are also the syntactical issues which would make it difficult in Python). Python folks always seem to minimize the importance of this Ruby feature, but in practice it is very useful/powerful and it can lead to very natural looking DSLs in Ruby.
there's nothing at all in Python the language that'd prevent a similar project, although the implementation would be pretty different.
I'm sure it would be possible in Python. But as you say the implementation would be very different (and perhaps I could even add that it would be much more difficult and it would probably require a significantly larger code base).
I'm not trying to start a language war,
Oh, of course you are. Might as well just admit it.
As far as Ruby vs. Python features go:
1) code blocks. Ruby lets you pass code blocks around. Sounds pretty dull, eh? But in fact it's what makes it possible to create Domain Specific Languages in Ruby quite easily without needing to create a special parser. In many ways Rails can be thought of as a domain specific language built on Ruby.
2) classes are always open in Ruby(including the Class class). By 'open' I mean you can always add new methods to a class (or even a particular object). Another feature that makes it easy to create DSLs
3) continuations. (Not that Rails makes use of them, but some other Ruby-based web programming frameworks do)
4) Ruby has true lambdas. AFAIK Python's lambdas are pretty limited (limited to one expression?)
Also, can you embed Python in HTML? (seems that the whitespace issue would cause a lot of problems with doing that)
I'm just looking for the practical solutions...
Give RoR a try. You might just find that it'll do everything you need it to do now without needing to wait around for a Python-based clone. What could be more practical?
Another is, how easy is it to find developers with applicable skills? If an organization commits to Ruby and their Ruby developer leaves, how hard will it be to find a suitable replacement?
(raises hand) Pick me! Pick me!
Seriously, I've been programming in Ruby for a few years now (sometimes even getting paid to do it). It's so much nicer working in Ruby and there are quite a lot Rubyists out there who would love to get paid to develop primarily in Ruby.
Also, anyone who knows Perl, Python or even C++ should be able to pick up Ruby in a week. Companies are often too concerned about findind someone with an exact skillset that they overlook a candidate's growth potential.
RoR has given PHP a run for it's money.
PHP is now very tired after that race. Please let it lie down and rest.
You count getter setter methods? You know that they can be produced lets say in 3 seconds with any modern Java IDE..
:bar, :baz, :foo
Good point about the getter/setter methods. To which I reply: You know they can be generated for you if you use a modern language like Ruby.
class Foo
attr_accessor
end
Now the class Foo has accessor methods (getter and setter) for the instance vars bar, baz and foo.
A total of six methods were created from that one line of code. No need for a 'modern Java IDE' - vi or emacs work fine. You want read-only access? Use attr_reader then only the getter methods will be created.
This is probably why the method count for Ruby in the article was significantly less than for the Java version.
Yeah, you definately shouldn't even try RoR out. Let the rest of us profit while you keep your head buried under the sand.
"No one is blinder than he who will not see" Bono