How can I learn CAD/CAM/CNC programming? [closed] - cad

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I've always enjoyed programming and I always enjoy learning new langauges (anything e.g. Java/C#/Erlang/F#/Clojure/Ruby etc), but something's never seemed to enjoy it as much as I want.
One thing I'm curious about which I'm wondering if I might enjoy completely is CAD/CAM/CNC programming and design and I was wondering if anyone has any tips on where/how to start learning, what software there is out there that would be helpful for learning with (preferably free/open source and preferably for Linux, though I appreciate options may be limited).
Any tips would be appreciated.

You can start trying EMC (free) at http://www.linuxcnc.org/
Just a few comments:
CNC is a generical name for computer controlled machines (the "N" comes from Numerical)
There are several standards (as always) for the language, perhaps the most used is ISO 6983. However you'll find out quickly that each machine implementation is different.
There are also relatively cheap machines (under $1000) that you can buy or DIY to effectively run your programs and make "real" things. See for example http://buildyourcnc.com/default.aspx or http://wiki.makerbot.com/cupcake. You'll not catch up the quirks of the trade until you can run your programs in a real lathe or mill.
CAD and CAM programs from the programmer's POV can be thought as visual CASE tools.

Check out the available books like 7 Easy Steps to CNC Progamming . . . A Beginner's Guide Also, checkout MyIGetIT.com they have great turorials on the major CADCAM systems. Here is a code ( RES-10-HAYPB) for 10% off any/all of their cad/cam training courses.
The key to learning anything is having a specific project in mind. For example when learning to play a musical instrument, it is much easier to pick a song or style of music than to just "try to learn to play guitar." When you have a song or piece in mind, they you can focus your learning.
The same is true of learning CAD/CAM NC programming. What do you want to make? will it require a lathe, milling, drilling, routing, laser cutting, waterjet or . . .? If you want to make tractor spondles or disc rotors for a motorcycle that is different than where you would focus your efforts if you wanted to learn to program a router to make cabinets, or door panels.
Like programming computers what is your project? working with date, making games or simulators, perhaps calculation programs or business utilities. Having a reason to learn C#, Java, SQL or what ever is the key to effective learning.

As someone who has worked in the industry for a number of years I'd have to say that I don't think there is anything available for free and certainly not open source that would get you very far. Most packages cost thousands of dollars. However you could learn some basics by just coding in straight g-code; you really need a machine available to try with as every machine is somewhat different in specifications. Generally the programming manuals that come with CNC machines are the best place to start.

Why not try opencascade,it's opensource.

This is a little late but MasterCAM does offer a student version that comes with instructional books from emastercam.com
There are also many community colleges in areas with large machine trades that offer classes in MasterCAM, CATIA, and NX. It depends very much on who the largest vendor in that area is. MasterCAM is probably the most popular mid-range CAM product and is almost a prerequisite for a CAM programming career, but is a mid-range software and the usability of the software reflects that.
Most machine programming is done using software and it is more correct to refer to it as CAM programming. NC programming lost prevalence almost as soon as CAM software came out in the 1980's. However, it is very important to be proficient in NC code. I still write NC programs every day.

Related

Is specialization necessary in software development [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
I have graduated from my university almost a year ago. Since then I have worked with many different technologies, such as PHP, JQuery, ASP.NET, C# etc. Recently I have switched to a company where powerbuilder is being used for development.
The problem is that I haven't mastered any of the above languages. I can do stuff with those but when it comes to the complex tasks I often struggle with it because I don't have enough deep knowledge about it. After looking at powerbuilder for a few days I sense that this is going to happen again because most of the application code have been done using some sort of library which requires some advanced level of skill on powerbuilder.
My question is, is it OK for me to work on different technologies without mastering a single one of them?
If you choose to specialise the you are taking an opportunity cost by making yourself unavailable for other types of work. This is good if you can be confident that your chosen specialisation will last for a reasonable length of time. However, you can guarantee (along with death and taxes) that software will change. You will always be required to learn some new framework or approach in order to remain current.
So to avoid finding yourself at an intellectual dead end (are transputers still in use anywhere?) you should adopt a doctrine of constant learning. Learning is usually fun and almost always leads to a joy of discovery of some new tool or design. And never keep this knowledge to yourself (it only has a half-life of 18 months anyway). Share what you have learned with others.
So to answer your question: don't specialise.
According to the Pragmatic Programmer book, one of the tips for a good programmer is:
Invest Regularly in Your Knowledge Portfolio
Make learning a habit.
This means that you constantly have to use, or learn about, new technologies. While becoming a master in one particular technology may be rewarding, technologies come and go, today more quickly than ever. A mastery in one particular programming language, tool or API may make you a guru today, but may mean nothing tomorrow.
IIRC they also recommended developers to master several technologies, but remain versed in many - at least in the sense of having heard about them, played around with them, being able to engage in a conversation about them.
So, I would say yes - specialization is necessary, but this doesn't mean one should ignore domains outside his own.
There is no 'right answer' to this question other than maybe, 'it depends'.
You will find it easier to find better jobs if you specialise, as you call it. I would think of it more as working with a specific language/framework. Further, it is important to solve difficult problems and gain experience, irrespective of the language chosen.
Once you've accepted the above as a truism and specialised, then I would suggest that you branch out and learn new languages. Fortunately, languages become easier to learn when you have more experience.
However, more than anything, you have to look at keeping yourself interested over a long period of time. That is the real key. If you have interest, you will continue learn and gain experience. Maybe that will mean you do something that is not particularly relevant to most jobs, such as writing a language compiler. Or maybe you will find that the rush of working for big clients on big projects is more important than a specific language/framework.
So that's it - just keep interested, and keep learning. And, where possible, build focus in the thing that interests you, as that will make it easier for you to find employment going forward.
It is important to be specialized in at least one programming language/platform, especially early on in your career. By specialized i mean reading a book about it, cover to cover, and having extensive hands on experience developing for it, at work or participating in an open source project.
The idea behind this is that when you specialize in a language, you will learn many concepts that you can carry over to different languages/platforms. e.g: The master of a language can master another with relative ease.
Further on in you career being exposed to many platforms is a good thing, as you start to shift from begin a developer to a developer/architect, and you need to make decisions about which platform to use, the pros and cons of each platform and so no.
So my advice is try to master at least one language, along with its tools and frameworks. After that you can move on to different platforms. It is important to use the right platform for the current project, you will need to determine that case by case, with the assistance of a senior developer.

As an EE/CE, what languages/concepts should I become more familiar with before graduating? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I am currently entering my senior year as a dual major in Electrical Engineering and Computer Engineering, and have touched on a wide variety of different languages: C, C++, C#/XAML, Java, bash, python, VHDL, assembly, etc. I was wondering what you think would be a good language/few languages to become more proficient in, or to explore for a first time. Also, what level of programming you prefer (hardware, local, network, system, design, integration, and so on) If you could tell me why, I would be grateful, or if you'd like to relate your experiences, I am quite interested
. I am hoping to find a job in hardware design, but as I become better with some languages, I am finding just how much I enjoy programming, so I really have an open mind at this juncture. I would love to hear from some people in the 'real world'.
You want to understand:
Different language paradigms (procedural, oop, functional, parallel, logic [e.g., Prolog], constraint). Do some programming in each.
Different software architectures. OSes, standard applications (MVC, ...)
Software Engineering: requirements, specifation (especially design-by-contract), design, testing. These ideas hold in hardware engineering too.
I would start not by learning a programming language but the fundementals like below 1) computer organisation 2) operating systems theory 3) fundementals of programming (oop and functional) 4) data structures 5) Compiler design and principles 6) dbms concepts
As a budding hardware designer you might want to learn Bluespec. This is a very high-level hardware-description language based on work done at MIT. It's both a language and a company. They have some very impressive results on modularity, predictability, and reuse in hardware design. Check out the page on the Bluespec compiler and find out if you want to pursue it.
I was wondering what you think would be a good language/few languages to become more proficient in, or to explore for a first time?
What do you want to accomplish? You seem to have a good grasp of many popular languages with several typing systems and paradigms. If you want to learn something else new, I would recommend functional programming as it's vastly different from anything you will have encountered before (imagine trying to write a program without an assignment operator eg. =) and becoming more and more useful. Haskell, Scala, and F# are all forerunners of the functional programming pack.
Also, what level of programming you prefer?
It all depends on what you want to do and what skills you want to use. Hardware and system programming will involve more low level stuff (assem, C, C++). The others are less language specific, but involve other skills, like a thorough knowledge of networks and APIs.

Choosing a Job based on languages? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
How often is language the deciding factor for selecting a job?
Many of us here are well versed in many languages, C++, Java, C#, and likely have many other languages under our belt for the right occassion (really any occasion is the right occasion for Python, AMIRITE?), so this isn't so much a question of choosing a job that is a good fit based on your skill set. Rather, if you are skilled with most languages, do you pick your favorite, or do you follow the money (given the tight economy).
I'm considering coming out of retirement, and have started to look around and what's available.
Over the years, I've moved towards C# and Python; many jobs in the area are looking for .NET developers, but there are plenty of them that do not. I cut my teef on C++, consider myself adept at the language, and know my way around a Java. But I find myself really digging what they're doing to C#, and I have always loved python.
Even if the work will be interesting, how important is the language to you?
I think that although in its essence programming is bigger than any language(languages are just the means, not the goals) everyone has a preference toward some languages. However, it often turns out that our preferences are towards languages not considered mainstream.
I live and work in Bulgaria(a country known from the movies as the center of crime in Europe, though that's not the case). Here 90% of the job ads are for PHP, Java and C# developers... There is also C for embedded development(which I hate), C++ (for maintenance of older systems - no one starts new projects in C++ anymore) and Cobol :-) I'd very much like to make money developing in Clojure or Ruby for instance, but the reality is that there is simply no demand around here. Of the three options I've found Java to appeal most to me - it's a nice language, with a nice community around it and a great VM behind it. So I naturally consider Java ads first, but I'm always open to any challenges as long as find them intriguing...
I would think that one would have a bias towards not just the language they want to develop in, but in the environment and type of applications they are likely to be working with. I think that would be the deciding factor?
Java - Coffee grinder
Python - Snake charmer
C - Optician
C# - Laser eye surgeon
C++ - Night vision goggle manufacturer
Ruby - Jeweller
.NET - Fisherman
the language itself doesnot matter so much, as the technology used does.
for example, a php/mySQL developer could easier convert to ASP.NET/MSSQL, than a .NET Windows Forms programmer will. I was both and felt more support from my php/mysql skills than my desktop C# programming ones.
But when the working process is annoying to you (e.g. you don't even want to go back to C++ coz it was hell for you), you better go find .NET desktop jobs - you will find that 90% of work done in the past by you in C++ was abstracted in .NET libraries and you'll get more fun from programming (though some people love that so-called 'c++ hell' for hacking).
as Chuck Jazdzewski fatherly said, (at the end of http://www.removingalldoubt.com/PermaLink.aspx/a32977e2-cb7d-42ea-9d25-5e539423affd ) , programming is fun, but shipping is your job. Joel Spolsky (www.joelonsoftware.com) has also nice entries about that.
Consider this when you are looking for a new working environment.
I've chosen Java. I know many more, but I think its the best decision to stick with one. If you work one year Java, one year c#, one year python you will not get a job as Java programmer that should have at least 3 years of experience.
For a coder, who's profession is based on it, is should be the main deciding factor. (...with Money a very close second!)
This may sound shallow but I tend to stick with the one I know best. Having spent several years in C# and .NET I wouldn't go back to PHP or Java, not because they are bad but rather I don't want to have to re-learn everything again... it would be sort of like starting all over again.

How and why are languages formed / Are there any developing languages showing promise? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
Question 1: How exactly do modern computer language come into being and why? How do they get their start and who is behind them?
Question 2: If any, what languages currently in their infancy are showing promise?
How exactly do modern computer language come into being and why? How do they get their start and who is behind them?
It's a multistage process:
Pointy-headed type theorists and other professionals are continually proposing new language features. You can read about them in places like the Proceedings of the ACM Symposium on Principles of Programming Languages (POPL), which has been held annually since 1973.
Many of these proposals are actually implemented in some research language; some research languages I personally find promising include Coq and Agda. Haskell is a former research language that made it big. A research language that gets 10 users is often considered a success by its designers. Many research languages never get that far.
From research to deployment I know of two models:
Model A: A talented amateur comes along and synthesizes a whole bunch of existing features, maybe including some new ideas, into a new language. The amateur has talent, charisma, and maybe a killer app. Thus C, Perl, Python, Ruby, and Tcl are born.
Model P: A talented professional make career sacrifices in order to build and promulgate a new language. The professional has talent, a deep knowledge of the field, and maybe a killer app. Thus Haskell, Lua, ML, Pascal, Scala, and Scheme are born.
My definition of a professional is someone who is paid to know about programming languages, to pass on that knowledge, and to develop new knowledge in programming languages. Unfortunately this is not the same as designing and implementing new languages, and it is not the same as making implementations that many people can use. This is why most successful programming languages are designed and built by amateurs, not professionals.
There have been quite a few interesting research languages that have had hundreds or even thousands of users but yet never quite made it big. Of these one of my favorites is probably Icon. I have argued elsewhere that nobody really knows why languages become popular.
Summary: Languages come into being because people want to make programming better, and they have new ideas. Languages get their start when somebody takes a whole bunch of ideas, some new and some proven, and synthesizes them into a coherent whole. It's a big job. The person behind a new language might be a programming-language professional, but historically, most languages that become widely used seem to have been created by talented amateurs.
Answer 2: Fortran 2008 looks very promising.
Come on, bring on the downvotes you humourless Java-teenies, Pythonettes, Rubes and Haskellites !
1) Most development environments these days are built to abstract a lot of low-level/inner workings of an platform to speed up development and cater for new user-interfaces and plaform technologies. There are a both open-source projects and corporates behind these changes... For instance an example would be jQuery is a newish Library that just wraps a lot of javascript making things easier and cross-platform...
Bjarne Stroustrup wrote a book on the history of C++, called "The Design and Evolution of C++".
The genesis of a programming language is always a different story. I'm currently reading "Masterming of programming", which is a series of interview with authors of popular languages. They explain what problems they tackled and how the language was born -- a really cool book.
The TIOBE index can give somehow a trend amongst the programming languages, including the emerging ones. I bet that the future lies in language that will run on top of the JVM or CLR (Notably due to the effort invested in the VMs which are now really great). Concurrency seems to be one of the hot problem of today; so I guess we will see some interesting moves in this area (e.g. Clojure).

What language to further develop in? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
Okay, so far, I have been taking computer science courses in my high school and doing some of my own research on the web, and I have found I really like the subject. However, the computer science courses, having given me a small amount of experience in a few languages (C++, java, and python), leave me wondering where to go for development on my own.
I would like to create desktop applications, or even web applications if I could wrap my head around it. What language would you think would best facilitate this?
As a side-note, what are some good books or online documents that explain general computer science topics? I have found some good ones, but they haven't given me the depth I really want.What are some good ones?
Find an "itch"--a program you wish existed, that would be useful for you to have, but you can't find (or costs money). Then try writing it, using online resources (like Stack Overflow) to help you.
At this stage in your career, language doesn't matter very much. Some languages are better than others at certain tasks, but often your own level of comfort with the language outweighs other issues. So just pick a language you're interested in, and a project you're interested in, and get to work.
You may find that you need to start with a simpler project, or you may find more resources for a different language or framework. But getting started with something--no matter what that something is--is probably the most important thing.
Here is a classic but still quite relevant book if you ever want to level up from coder to software engineer.
Since you're still in high school, I would tell you that time is on your side. You have plenty of time to develop as a computer scientist. Therefore, take the long view for your development. So it's much better for you to understand the abstractions that underly software technology.
In my humble opinion, C++ and Java will always be around and you have plenty of time to develop your skills in that arena. However, a higher level language like Scheme or Python will pay plenty of dividends. You might find this recommendation highly enlightening.
In addition, every application will deal with a database as its system of record. Understanding SQL and data modeling is a win-win.
Also, understanding formal logic and/or discrete mathematics is indispensable for computer science. Computer languages are nothing but formal languages for executing
procedures: i.e. mathematical induction is used to define their syntax and semantics.
It sounds like you would enjoy jumping into a high level, modern language that's native to the operating system you want to target; Objective-C or C# for example. On the other hand if you really want to do something for the web, building a web app isn't much harder (there are just more choices to pick from for the back end and front end technologies you decide to use).
Basically, decide what project you want to work on and choose the best language for it. What really matters is that you're working on something.
What language to further develop in?
Given that you know C++, Java, and Python already, a next language I might suggest would be SQL and DDL: defining databases, and getting data in and out of them.
If your CS course didn't touch on it, I highly advise spending a bit of time with a more functional style of language like erlang, haskell or even lisp.
They won't become your day-to-day hacking language overnight, but can really help you grasp important programming concepts relavent accross all languages.
....especially the one about choosing the right language for the task at hand.

Resources