Smalltalk Learning Project: Any recommendation? [closed] - smalltalk

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
Currently I am learning Smalltalk. I do this because I want to learn as much as I can in one week about a new programming language in order to improve my skills. Next week I will try something else.
So far I am able to read Smalltalk code but I have a very limited experience in writing. Can you recommend me any small size project that will help me understand better this language in a short time period?

Look into a book Squeak by Example, there are many examples to work on and practice. After a while you'll be very well prepared for some real, yet mini project.
I think you need only few days for a book with examples, so this is well spend time even if you have just one week.

I really, really like The Laser Game Tutorial
Tutorial: Squeak Development Example for Squeak 3.9
A.K.A. "The Laser Game Tutorial"
This excellent tutorial by Stephan Wessels will guide
you through installing Squeak, to creating a fun game using the Morphic graphics system, all > while observing solid object-oriented design principles
It is divided in 6 Sessions so 1 each day although I must say each session has taken me two hours or so.
Perfect for your objectives.

Anything not too trivial goes well. If you plan going on squeak, I'd propose you to write a card game, lottery or something else such.
It'd be more useful for you to find out some example code though. What prevents you from writing C in smalltalk?

Just do whatever you'd do in the language you already know. Taking a small task like writing a simple TODO list or even simple blog will undoubtedly improve your Smalltalk skills.
And remember to be easy on yourself. Expecting too much too soon can be intimidating.

If you would like to try something different, check out GNU Smalltalk Koans at http://skim.la/gnu_smalltalk_koans/, a set of tests to teach you Smalltalk in the tradition of Edgecase's Ruby Koans and Python Koans.
It promises to incrementally deepen your understanding of the language through tests.

You can have a look at Programming with robots.
I think the BotsInc material can be mastered in one week - although the time taken can vary. There is a Free book version for download available. And for small real world projects there is NXTalk announced for
early this year.

I really enjoyed Ted Bracht's Dolphin Smalltalk Tutorial:
http://www.amazon.co.uk/Dolphin-SmallTalk-Tutorial-Ted-Bracht/dp/0201737930
It takes you set-by-step through a GUI-based windows application. It's a pretty good tutorial.

Apart from the The Laser Game Tutorial. (that I recommended in my previous answer)
There is the "The Bowling Game"
Article: Discovering Better Code
Series
A.K.A. "The Bowling Example" A guided
tour through the mind of a
Smalltalker: How to build a business
model from the ground up, factoring it
along the way. If you don't understand
how Smalltalkers think or why they
think that way, you need to read this
series.
The really nice thing about this project is that it is like being the pair-programmer of a great developer.
The author Ron Jeffries is one of tho founders of Extreme Programming and a book author.
So it is a really good resource. I wish more tutorials where written like this.

Related

Learning OO for a C Programmer [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 10 years ago.
Improve this question
I've been programming professionally in C, and only C, for around 10 years in a variety of roles.
As would be normal to expect, I understand the idioms of the language fairly well and beyond that also some of the design nuances - which APIs to make public, who calls what, who does what, what is supposed to reentrant and so on. I grew up reading 'Writing Solid Code', it's early C edition, not the one based on C++.
However, I've never ever programmed in an OO language. Now, I want to migrate to writing applications for iPhone (maybe android), so want to learn to use Objective-C and use it with a degree of competence fitting a professional programmer.
How do I wrap my head around the OO stuff? What would be your smallest reading list suggestion to me.
Is there a book that carries some sort of relatively real world example OO design Objective-C?
Besides, the reading what source code would you recommend me to go through.
TIA
Even though the book I am about to recommend you is not specifically for Objective-C (it goes through all concepts of OOP without diving into any specific language) it is probably the best book I've read yet on the subject for a beginner needing an introduction to the subject, it helped me a lot!
The book is:
The Object-Oriented Thought Process
I like this book because it assumes absolutely no knowledge of OOP whatsoever, but it is not dull in wasting time with basic programming concepts. It eases you from the procedural paradigm and then to the OO paradigm. If the author starts to use technical terms he is sure to explain them clearly first. The language is easy to follow and the book is most importantly not boring to read, it does not make use of heavy academic language.
The book is also good to give you some examples along the way to make explanations more clear to understand.
Note that the book I'm suggesting here was published (2nd edition) in 1991.
Object Oriented Programming: An Evolutionary Approach by Brad Cox, the creator of Objective-C, is the book he wrote to introduce his language to the world, and that was a world unfamiliar with the very idea of object-oriented programming. So the book goes very gently and introduces all the basic ideas.
Brad Cox had some ideas about how Objective-C was going to deliver really powerful re-use of components, but things haven't really gone the way he predicted. Still he was a smart guy and I'd recommend his book if you can get hold of it.
For completeness I'll second tuğrul's pointer to https://stackoverflow.com/questions/7571/cocoa-and-objective-c-resources, which has all the modern books listed.

A good programming language for programming code challenges [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 11 years ago.
Improve this question
From time to time you come across some interesting code or programming challenges,
such as the ones in Project Euler, some job interview challenges like greplin, or any of the other script challenges that are posted here.
All these require some fast, agile programming language with some kind of quick way to see the results, preferably command line. There's no need to worry about readability of the code or such. You just need an answer, and fast.
What is a good language to solve these challenges? What is the best hands-on method for solving, if you have to choose a language and learn it from the start?
Project Euler tells you that lots of languages are suitable. Those problems are solved in every language from Perl to C#.
The language you should use for challenges is either the one you know best or the one you're trying to learn right now.
If you mean fast coding, rather than fast execution, I suggest looking at Python. It's very high level (thus, you can code powerful things quickly) and has an interactive mode that lets you see results immediately, which sounds like what you're looking for.
Reading your description:
You just need an answer, and fast.
I assume you are talking about runtime. If this is the case, C++ is the way to go.
However if you just started programming and you need to learn the basics, I would suggest Python.
You need an answer and fast
Only if that is the way you find programming acceptable.
Or if you intend to not gain experience in teamplay programming.
You can't fool yourself :/
I just gave this advice to a similar question for a game development language choice:
1) What is my goal?
2) What engine is going to help me , or framework, platform, what are you depending on?
3) What languages can I use to accomadate step one and respect step 2
Basically what you can do is skip step 2 really.
And it's really about what YOU want. If you REALLY want to spend a lot of time working to quick results ( Which I can respect, I'm not trying to sound all-in attack mode here), you should consider C++. It allows you to dig deep, but it can be quick , even sloppy, if need be. But you do need a little XP in it.

Begin game programming basics [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Closed 6 years ago.
Locked. This question and its answers are locked because the question is off-topic but has historical significance. It is not currently accepting new answers or interactions.
My 11 year old kid brother wants to learn to program games. He has never programmed but would like to learn programming. His interest lies with games and game programming and he understands that it can be difficult but he wants to do that. So, obviously, I turned to SO folks to know what you feel on how he should go about it. Remember, please suggest on
Areas that beginners can choose,
how to begin in that area,
what to read in the beginning,
initial languages in the beginning etc.
Once the beginning part is taken care of, you may also suggest the intermediate and advanced stuff but this question is about very beginning level. If there are areas like Web games Vs. console games Vs generic computer games, then please advice on the areas. As I said he has never programmed, he might want to try all the areas and choose the one he likes the best. I hope this is not too much to ask for someone who is in this field but if this question is huge, please advice on how to break it into multiple questions. ~Thanks.
I started my programming career writing games when I was 15 and it was a lot of fun (even though I wrestled with C++ for 3 years just because "that's what's used for writing games"). My two cents:
Start with a programming language that is easy to use (NOT C or C++)
Get a beginners book for that programming language (not directed at games)
Decide on some API or environment that provides what's needed for writing games. I started out by doing snake, space invaders etc in the console, but any 2D-environment will do (stay way from 3D for as long as you can; there are much more important things to learn first). SDL/GLUT for OpenGL has bindings in almost any language. Pygame for Python looks promising too. Using HTML5's canvas-element, you could even write the programs in the browser using JavaScript. Im not sure what's best these days, but there you have some suggestions.
Find a community for inspiration and help when stuck. I used gamedev.net. Since we're on stackoverflow, gamedev.stackexchange.com should also be a natural choice :)
Start small. Very small. I mean really tiny. Then take small steps to new challenges. Please don't write an MMORPG.
The game design and graphics are fun, but focus on the programming (for now at least). When you've written a simple game, learn how to do the same thing better.
Set a goal. Imagine the game that you'd want to make. Don't try to make that one immediately, but make sure that each new thing you learn or make takes you one step closer. Don't learn what you don't need so to speak (there's simply too much too learn).
I wish you and your brother the best of luck, I never regret going down the path he's about to take!
For a beginning game developing enthousiast I think you can't go wrong with the combination Python + Pygame. Python is a great, elegant (and easy to learn) all-round language and lots of great tutorials are available for Pygame which explain the basics of (mostly) 2D game programming.
There's this post on Gamedev stackexchange where the poster is in literally the same position.
Quoting my answer from there:
I'm also 15, so I guess that could help? :P
I've recently started learning Python
(been doing C++ for a year or so), and
I'm finding it much easier to learn
than C++. There's a lot less pitfalls,
and you need little code to get
something on the screen - what I find
makes you want to continue.
And there's wrappers like Pygame and
Pyglet over SDL/OpenGL for the
graphics side.
And before he starts making simple
games, I would advise learning a
language for at least a couple of
months. (Of course, text based games
like guess the number and hangman are
good exercises during this time)
And for what to read; I can advise Invent With Python. It goes from learning the language in a very gamedev way - which is a good step to making sure he stays interested; I doubt many kids his age are going to want to learn all about variables and loops, moreso being able to make a game - all the way to seamlessly introducting PyGame and graphics.
It could take some time until he can program a proper game...
But as I see it, he should start with Java as it is easy to learn and good for basic games.
Starting out he wouldn't be able to do much more than a guessing game, but he shouldn't get frustrated, this will take time.
I think you should buy him a book on java, and start from the basics.
You would get many different answers on this one as it is mostly personal opinion...
Teach him the basics of programming: variables, declarations, properties, methods, arguments, classes, arrays, loops. I suggest C# as a starting language, it seems simpler than C or C++ to start with, in my opinion. Once he understands those concepts it shouldn't be extremely hard for him to jump in and follow some XNA tutorials on a simple game like pong or something.
Game Development, part of the Stack Exchange, is a great resource for these types of things. It's loaded with posts like this one.
How about instead of forcing him to learn a language first, get him involved in using a framework where he can readily see results to maintain an interest. Something along the lines of RPGMaker could be sufficient.
My reasoning for this would be that, yes, you want him to learn the basics of making games and introduce programming as well, but you don't want to burn him out on the formalities of a language.
If he is 14, then he is of high school age (assuming US based...), and there is a good chance that there are programming courses available to him there. Let him whet his teeth on those to grind out the difficulties of introducing programming, and then once he is interested in expanding beyond the bounds of the toolset introduce him to the answers posted by the other users.
My two cents...I've seen kids give up on programming before because they jumped right into game making and quickly got frustrated...
In the beginning, make sure you keep it fun. Try mocking old games like 1-stage of contra or air hockey. And use a programming language with easy implementation of timer. Because timers, I think are the easiest way to show some visible effects. I would recommend visual basic or objective-c (I know many people won't agree, BUT it is that damn easy with the power of Xcode). Thumbs up ! Have fun.
I agree with ChristopheD about Python and Pygame. When it comes to languages Python is great for beginners because it is very high level therefore so easier to understand and the syntax is clean and simple. And Pygame is a great library for learning game programming.
Eventually he'll want to move into C++, which as I understand is the go to language for game development. But Python and Pygame would be a better start, especially for an 11 year old.
A good series of easy to read online books are the following three:
http://greenteapress.com/thinkpython/thinkpython.html to learn Python
http://inventwithpython.com/ this site has two books, what to make games in plain Python and the other to make games using the Pygame library for Python. Once he gets through these three books he should be able to start making his own games in Python using Pygame and then eventually move on to more serious game development langauges/tools.
Write some simple scenarios for a game such as Wesnoth is maybe a good start.
Learning basis of programming is also important. A langage such as python is probably a good start.
The language is clear and easy to learn and teach.
And it is very extentable.
This is a -very basic- game source code (Butterfly adventure 1.0) made with javascript to start learn programming. Only basic codes (variable, if, switch, function, event, etc.) used.
It may be useful to start learning game development.
Play the game link
Source code link
Video tutorials (Only in Turkish) link
Screenshot
Have fun.
IMHO he should start learning C.
then switch to OpenGL later once he has the grip of basic C constructs.

How much time do I need to learn LabVIEW [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 1 year ago.
Improve this question
I know that this question is too abstract. But. How much time do i need to learn LabVIEW to become average LabVIEW developer? For example, if I buy good book about LabVIEW and have 8 hours per day (on my work) dedicated to LabVIEW learning how many days i will spend on LabVIEW learning? Could you please provide example from your own experience. More information about me that can be helpful: I'm a developer and know c\c++\python and a little bit of java languages.
Like Swinders said, it might depend a lot on your sensibilities. I have seen people who had a really hard time migrating to the data flow concept. It's a different paradigm from the classic text-based languages and some people can't easily think in these concepts.
If you get past that hurdle, you'll find that the IDE handles a lot of the annoying things you used to take care of for you (things such as syntax and memory allocation). This allows you to become productive very quickly.
It doesn't mean, however, that your level would be high. One potential pit you should try hard to avoid is casting your existing experience onto LV. The most common example is probably local variables. This may be shocking to people coming from a text-based world, but LV does not have variables, per-se. Unfortunately, it does have elements called variables and people migrating from C who find them jump on them and use them as they would use variables in C, leading to LV code which looks like C code and is bad code (at least in LV).
If you do manage to work around this, I would guess you would become better than the global average in less than a month and better than most professional developers after creating three projects you would later look at and say "what the hell was I thinking?".
I never took any of the NI courses (although I understand some of the advanced architecture ones are pretty good), but I would suggest you also spend some time in some of the online communities (such as LAVA or the NI forums) and look at some of the examples and discussions there. There's a lot of material about best practices, design patterns, etc., which would allow you to become a more professional developer.
Above all, do not abandon your current professional conduct. If you have a structured process for designing and developing software, you already have a leg up on the majority of LV programmers. Just make sure you adapt and keep using such a process.
I started with no commercial programming experience (I have always programmed for fun) and followed an on-line tutorial to pick up the basics of LabVIEW. Within a week I was able to understand existing code and could develop a small application.
It is hard to give an estimate on how long it would take to become an 'average' LabVIEW developer as this depends on what you mean by 'average'. One thing to consider is how easy you are able to think in terms of data flow rather than procedural languages. If you can pick up new programming languages quickly then this will help.
Would you be the only person using LabVIEW or are there others at your place of work that could mentor you? You may also find that there are user groups operating near you which I would recommend (check the NI website or contact your local NI office).
There is then the experience that you will need to gain to allow you to produce good LabVIEW code. I was lucky to be able to attend the National Instruments training courses a few years ago which I think helped me but only by using it have I become an 'average' LabVIEW developer.
I'd say a few weeks or most with devoting the majority of your work time to it. I had a similar background to you when I started to develop in LabVIEW. The hardest part was adapting to the lack of variables. There are local variables, but it's not what you're used to at all. Additionally, their functions, called Virtual Instruments (VIs) can have multiple inputs and outputs, similar to how Python can handle n-tuples.
I will warn you, their array handling features are terrible. A lot of general concepts you might be used to are difficult to implement. My mantra when working with the language is it makes hard things easy and easy things hard. There are also a lot of "gotchas" in the language set, especially with their DAQmx function. I'm not sure what you're planning on developing and their Real-Time module has it's own issues as well, different issues from the main language set.
I would definitely spend some time on NI's website and read as many whitepapers as you can, especially about good design practices, here and here. Learn their State Machine (here or here) and Producer/Consumer pattern well, that's the backbone of many applications you'll be writing.
Good luck, it will make your head spin for a while.
There are some excellent resources to help you get started. If your employer can afford training, you can get started pretty quickly by taking a week of training run by National Instruments. The NI website also has an outstanding developer community that is highly responsive to questions even from novice developers. But I would say that the key to being comfortable with the idioms and style of the language is just plain old practice that you get by solving problems using LabVIEW on a regular basis.
You will find eventually that there is the question of hardware and instruments. Labview is really all about data acquisition-- either through NI's DAQ hardware or through traditional GPIB instruments, or through 3rd party api's (activeX, .NET assemblies). If you're using LabVIEW, you're probably interfacing to hardware of some type. This can get really challenging with complex instruments and measurements. If you're getting started, I would recommend making sure that you have unlimited access to at least some of the hardware you'll be working with. In other words, make sure that your manager understands that you need a lot of access to the hardware in order to get good at developing with it.
We are using LabVIEW to create test software for our factory test systems. In the past years I have already trained some beginners to understand LabVIEW. I would say it depends on how good you are at learning new concepts. I have trained some to be able to produce standalone applications using the queued message handler concept, doing dynamic GUIs and using hardware drivers within about 3 weeks. Unfortunately there were others aswell that were only able to learn half of that within half a year.
The most important thing in my opinion is the learning source. Having an experienced LabVIEW user that can guide you is the best option. If there is no one not available I would recommend Youtube Tutorials combined with the shipped LabVIEW examples.
The LabVIEW core tutorials are not very handy in my opinion. Those are quite boring and far from what you really need to get started.

How to move over [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 3 years ago.
Improve this question
Uphill about 5 years ago my career was going fairly well, but separation, family deaths and a bit of illness caused me to make a couple of BAD career decisions, and I ended up in a dead end job doing mainly vb 6, though it was the end as mid to late 30, but was recently handed a break, working with a forward thinking vb.net company and I took the chance with both hands, been there 5 months now
Thing are going ok, spending a lot of time in places like this, and reading books, but coming from a C / Machine Code / VB 5 &6 background, I'm finding the little intracity of .NET lost on me, if I write code I wouldn't think to use delegates for example, has anybody got any advice on making the 'brain' VB.NET jump, or training I should be looking at (bear in mind that I'm not rich)
Thanks for your time
Taking a introductory .NET course will be a good investment. It gives you a chance to focus on .NET for four or five days and build a good foundation.
The other choice is to use online resources and do self study. One suggestion (out of the ton that are out there) is to follow one of the webcast series available at http://www.microsoft.com/events/series/modernsoftdev.aspx?tab=webcasts. Although they are a little dates (they focus on Visual Studio 2005) they are designed for people like yourself.
The other suggestion is to find a local .NET user group. Spending some time with people and sharing exeriences will help you learn and will give you a chance to do some networking.
Just work with the .NET framework, and the use of things like delegates or interfaces will come to you. Since you already know that they exist, you will find yourself in a situation where you think "Gee, this can easily be done by using a delegate!" If that happens, use a delegate.
I think this is better than looking for a way to use all those shiny .NET thingies - they are useful, but only if used correctly.
IMHO, I would suggest not moving to vb.net at all, but instead utilizing your C background, and making the move to C#. The reason for this is, you already know the syntax and that VB.net is not enough like VB6, to make it as easy a move as you might expect. Plus you're more "likely" to come into contact with developer's who use the more advanced features of the framework etc.
This might be a slightly controversial statement but I firmly believe that in order to re-ignite a career it's sometime better take a mental leap to something new. You'll find that everything you've learn prior to this, will cement the new knowledge you'll be acquiring.
In addition find a personal project you can get highly motivated about, with a tangible end goal/deliverable, that will make learning your new skills much more fun.
It's not like C/Machine code programmers aren't in demand... They're growing increasingly rare as developers are breast-fed with Java or .NET nowadays :)