If I learn Gtk3 expert level with C, can I learn PyGtk3 expert level? - gtk3

I know this question can be nonsense. but anything for learning gtk3 with C (tutorials on the net, books, everything in the world) are too many than anything for learning pygtk3, java gtk3, ... so I can learn gtk3 expert level with C. if I do this, can I learn pygtk expert level.

Related

Preparing for a Scientific Programmer/HPC programmer Interview

Could you recommend sources/literature to prepare for Scientific Programmer/HPC programmer Interview?
Thanks!
"Introduction to High-Performance Scientific Computing" by Victor Eijkhout is a very good book to start with (and is relatively up to date). You can find it freely on his personal home page.
As this book mainly focus especially on quite theoretical/abstract concepts, you probably need to complete the book with practical HPC programming. MPI and OpenMP are two programming standard massively used in HPC applications. As a result, I strongly advise you to learn how to program with both, especially from practical exercises.
There is a lot of resource you can find on internet for both. If you don't now how to start, please look here for MPI and here for OpenMP.

Learning Haskell with a view to learning Scala

I've read a few questions such as Scala vs Haskell discussing the merits of both languages or which to learn, but I already know that I'd like to learn Scala. I was a Java programmer at uni and now mainly use PHP.
I want to learn Scala as it looks like an improvement on Java for personal projects and I'd also like to learn a functional language to improve my knowledge as a programmer.
I am wondering if it would be a good idea to learn Haskell as an introduction to functional programming as it is purely functional so I'd properly learn it rather than haphazard using bits of functional in Scala without knowing why?
I'd also like to use Haskell for personal projects etc as it looks great, but I don't really see many real world applications of it, seems more used for academic stuff hence wanting to learn it to get the functional understanding then move on to Scala.
Speaking as someone who came from Java, and for whom Scala was a gateway drug to Haskell, I happen to think this is a great idea (learn Haskell first)!
Haskell is conceptually a much simpler language than Scala, and if your goal is to learn how to program functionally, you can't help but do so if you start with Haskell. By design, Scala supports a kind of "legacy mode" of coding in which you don't really have to change your Java (or PHP) habits too much if you don't want to. I think this is a strategic decision--and a good one!--meant to increase adoption amongst crusty Java stalwarts.
But that's not you! You're actually interested in learning something new... so why not go all-out? Learning functional programming in a pure setting, without the clutter and the temptation to regress into old habits, will crystallize the concepts in your brain.
Then by all means return to Scala and learn how it differs from Haskell; it is both weaker in some respects and stronger in others, but you will then be on a much better foundation to appreciate these differences.
I came to Scala from a Java background. Initially I just focused on Scala as a better Java. As time went on I started to use more and more functional concepts in Scala. Eventually I reached a point where I felt I needed a purer understanding of functional programming. It was at this point that I went away and learnt Haskell.
When I cam back to Scala I found it much easier to use a functional style and some of the the concepts I struggled with previously made much more sense.
You don't have to learn Haskell to become a good Scala developers, but I think once you get to a certain level in Scala that having a deeper understanding of functional programming concepts really helps.
I wouldn't do that. If you go straight to Scala (your final aim) you save time. You'll learn functional programming anyway, but as Scala is "less pure" you'll be able to start writing programs in Scala usign some Java-like constructs, which will make the transition simpler.
Even if you go into Haskell, your first programs will be of less "functional quality" than later ones, as only practice improves that. Starting Scala your first programs will be of "less quality" as your first programs in Java or PHP were, but with practice you'll improve. Spending time in unrelated tasks hoping they MAY help, it can result in you wasting that time.
Focus on your aim. If that's Scala, go for it.
UPDATE: I believe this may be relevant to the question. It raises a point on productivity (deliver software) vs seeking "pure knowledge".
The risk of starting directly from Scala, without having played any purely functional programming language first, is that you'll probably be drawn to the procedural solutions a bit too often.
I wouldn't try Haskell as an intro to functional programming, though: not that it's particularly hard - its syntax is amazingly terse - but it's definitely very peculiar (even in the peculiar world of functional programming) and I think you should try with a language you can port more easily to Scala, like Racket or plain Scheme.
To better understand what I mean, look at list comprehensions in Haskell, Scala and Scheme.
I learned Haskell first and then Scala and never regretted. You will gain a much deeper appreciation of FP if you learn Haskell first. Your understanding of the concepts behind FP and why they are important will be seared in. Much of Scala is taken from Haskell (IMHO). It will make more sense when you have the Haskell background. Don't shy away! Your efforts will be rewarded.
For me, I want to learn Scala and functional programming; and, thus simply, I am learning Scala. My study material is Programming Scala. After I have read the early chapter on syntx and stuff, I have skipped chapter covering OO stuff and jumped to Chapter 8 which cover the functional programming stuff. There I let myself struggle with FP.
I read this scala code, which is written in FP way and analyze it. You want to learn Scala for "...an improvement on Java for personal projects." and Haskell for FP intro. So, it seems that first of all, you want to be productive with your java project and then grasp FP as a side effect. To be productive, you have to master the language. There are much to learn and master the language and the only way to master the language is that you have to write the code in that language. As you learn/use Scala, you can't avoid FP out right even if you want to. I have been reading the Scala blogs(the book too) and the authors always go out of their way to do explanation when it comes to FP concept. You don't have to worry about not grasping FP by going Scala route. Yes, you can draw inspiration from Haskell like this when you are learning Scala. Or as Chris Turner above have pointed out, you can delve into more FP when you are already productive with Scala.
You wanna go to point A, why not go to point A directly? If you go via the route of point B (Haskell), you will have to postpone your productivity as Pere Villega mentioned.

How do I learn Scheme? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 7 years ago.
Improve this question
Hey, I'm a relative newbie to programming. I've picked up some very basic Java (File I/O, GUIs, inheritance) and would like to take a look at functional programming - in particular, I would like to learn Scheme. I'm having some trouble finding a Scheme implementation I can understand. Interpreters are weird; I'm not sure how to save my programs and create executables. I've downloaded PLT Scheme, but I would prefer using something less condescending, something similar to NetBeans. Is there a plugin or tool that will allow me to quickly and easily create and manage Scheme programs? All help is appreciated!
some nice links for you
http://mitpress.mit.edu/sicp/
http://www.htdp.org/
both are course books. The courses with video lectures are available on the MIT opencourseware site.
http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/index.htm
I wish I had learned Lisp when I was 16. (I started programming commercially at that age.) I didn't learn it until I was nearly 40. Where I was once blind, now I can see. (Well, I can see a few inches ahead of me anyway.)
I second the idea that someone else here posted about learning Emacs.
One good way to learn any language is to go solve problems on projecteuler.net.
Try the book The Little Schemer, it provides an unconventional but yet easy to follow tutorial on Scheme, and in particular teaches you how to "think" recursively, which is essential in order to understand Scheme (and other functional programming languages).
Get DrRacket (Runs on any platform)
Get a book used from Amazon "The Scheme Programming Language" Cost $3.00 book $4.00 shipping
When you open open DrRacket use language from the pull-down menu.
enter
scheme
on the top of the script window and start on the exercises!
.....that's what I am doing now
SICP (Structure and Interpretation of Computer Programs) is sure a great book, but it is not necessary a good introduction to Scheme programming. Though, after some understanding of Scheme, reading SICP is recommended.
Learning to use Emacs as an editor would be useful. As a Scheme implementation I would recommend something like CHICKENscheme. Its manual describes for example how to deploy programs.
An alternative is a Scheme development environment like JazzScheme.
A good book for learning Scheme would be The Scheme Programming Language.
I think the docs for plt-scheme is quite nice http://docs.plt-scheme.org/ is worth reading
and also: write code, write code, write code
Maybe this isn't the best answer but one of things I have found over the years is that a lot of new programmers get pulled in too many directions. If you are just starting out the best thing you can do (my opinion) is to learn one programming language really well. If possible I would try to make this the language you are working in, if you are not working in a programming job then I would try to pick a language with the best prospect of getting a job. Once you have mastered this one language then learning other languages will help enhance your already solid foundation and help make you an exceptional programmer.
Don't get me wrong, learning Scheme is a great thing to do but until you have mastered one language you will have a harder time moving up the ranks and landing that perfect job. In the end most companies are looking to hire the guru's, make sure you are in this group.
I took a programming languages course in college that was done entirely in Scheme, and the textbook we used is "Programming Languages: Application and Interpretation" by Shriram Krishnamurthi, one of the guys who helped write DrScheme. The textbook is available freely online. I found the book to be really helpful and informative when trying to understand the arcane mysticism of Scheme.
A nice beginner intro to Lisp is Common Lisp First Contact
Not a heavyweight course like SICP mentioned above, but a gentle introduction
to the syntax, features and oddities of Common Lisp in a nicely formatted PDF
optimized for screen reading.
Well I can't help You much with the tools. I tried MIT implementation and got a bit lost too, but I'd like to recommend a book which is a great source of knowledge about programming in general and uses scheme for illustrating ideas. If You din't come across this one yet, You have to check SICP
If Java environment is already comfortable for you, then probably the best way is to use Scheme implementations that run on top of JVM. For educational purposes SISC is more than enough:
http://sisc-scheme.org/
Alternatively, you could use Kawa or Bigloo.
If you're up to learning functional ways, and not necessarily bound to Scheme, then probably Clojure would be a right choice.

The Framework/IDE Knowledge Trap [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 9 years ago.
Improve this question
We don't teach children calculus first. We first teach them arithmetic, then algebra, then geometry, the analytical geometry, then finally calculus.
Why then, do we teach our computer scientists frameworks and IDE first. Some curriculum do force students to learn computer science fundamentals, but the vast majority of graduates that I see could not compose a framework of their own to save their lives.
Where then is the next generation of tool builders?
How can we promote the understanding necessary to create frameworks and development environments?
This is of course a generality. Not all education is lacking, but it seems to be the majority and it brings down the quality of our profession as a whole.
I think the analogy is a bit off. A better analogy would be "We don't teach our kids to use calculators to add and subtract, why teach programmers to use an IDE to program?"
Get rid of HR departments that require X years experience in Y. The universities are just tailoring their course to the HR department's requirements.
I employ graduates who can code in something (I really don't care what language) and who can learn.
I see your point, although I think the math analogy doesn't quite fit. You have to know basic arithmetic to be able to get anything done in any other math discipline.
When I began programming frameworks were mostly unheard of. If you wanted a binary tree, by God, you went and wrote one. In C or Assembler. That was basically it, so to get anything done at all you had to know a lot.
Today, Frameworks and IDEs and designers make it possible for "noobs" to create actually pretty brilliant things without knowing the first thing about how to build a framework, or a compiler, or manage memory allocation.
The real issue is, what about all the dingbats that think they are awesome, great programmers because they used Frontpage or Access? Managers have a hard time telling the difference between that kind of programmer and one that really knows software development as a discipline.
So, specifically, why is it that way? Because everyone wants a job and nobody hires programmers that know how to build a binary tree. They want programmers that know .Net or J2EE, etc.
I would argue that there is probably enough work out there for 9 to 5 programmers who can start at the framework level and go up from there. The truly good ones - mostly your program as a career and/or program as a hobby - are going to get the knowledge they may have missed in college over time anyway. You can't force everyone to be a wonderful programmer no matter what curriculum you teach. Inquisitive students are going to learn about the fundamentals whether its taught to them in class or entirely on their own.
There are tool makers and tool breakers. And of course there are tools, but let's not go there.
If you have a good look at an automotive workshop, you will see a lot of funny little tools that you don't see on the shelves in hardware stores. Like the ones for pushing back brake caliper pistons. Or the clamps for compressing valve stems so you can get the collets out with one hand while talking to your mates about nailing the new secretary (instead of watching them fly across the room when the spring slips out from your screwdriver).
These were designed by mechanics. They're really effective, generally small and cheap, and totally incomprehensible until you seen them in action.
Most of the profound changes in automotive technology were bottom-up, but top-down is also needed. Individual mechanics can't make fundamental technology changes like the switch from cast iron to alloy heads. A new broom sweeps clean, an old broom knows the corners. You need both.
But I digress: the point is that the mechanics couldn't design these tools if they lacked fundamental skills and knowledge. My father built me an entire motorcycle from scrap iron when I was a kid. As an adult, because I lack his skills and knowledge and modes of thought, I can barely maintain the bike I bought from Honda, much less take to it with an oxy like Mr T in a creative frenzy.
With code, I am as my father was with steel. Donald Knuth is my constant companion, and when the wireless protocol for our GPS loggers needs to be implemented in .NET it's me they come to see. The widget monkeys wouldn't know where to start.
I think the problem is in fact the GUI paradigm in general.
Microsoft made using computers much easier, they popularized the Graphical User Interface. They brought this interface metaphor, (the desktop, the file) to the domain of programming as well and very effectively too with their Visual Basic tool.
But just as the GUI obscures what happens "under the hood" so does the IDE obscure the manipulation of bits and bytes. The question is, of course, risk to reward ratio - how much understanding do programmers lose in exchange for productivity?
A cursory look at "The Art of Computer Programming" might show why IDEs are useful; "The ultimate packing density is achieved when we have 1-bit items, because we can cram 64 of them into a single 64-bit word. Suppose, for example, that we want a table of all odd prime numbers less than 1024, so that we can easily decide the primality of a small integer. No problem; only eight 64-bit numbers are required:
p0 = 011101101101001100101101001001001100101100101001000101101101000000
p1 = . . ."
Programming is really hard, you can see how an IDE might help. :^)
Learning the abstraction is easier than learning the details when it comes to programming. It's harder to teach someone to hand-code assembler to print "Hello World" than it is to have them throw together a form with a button on it that shows a "Hello World" message when the button is clicked.
You didn't know how to build the engine of a car before learning to drive, did you? Because it's not necessary in order to drive. In the same vein, you don't need to learn how a linked list or binary tree works in order to maintain a list of names and search them.
There will always be those who want to get under the hood and learn the "why" of things, but I don't think it's required to get things done.
I always screen applications by asking difficult questions that they could only answer if they understood how something really works. I think it is a real shame colleges and universities are teaching people framework based development but not focusing on core software principles. I agree that what matters more than anything is someone who understands how programming works and has the drive to learn anything they can about it.
Most universities I know of have an introduction to computer programming course that teaches basic programming concepts. Unfortunately it is impossible to teach programming without actually writing code.
The problem is that some prefer to teach this course using some OO language such as JAVA or C# and so the students must use Visual Studio (or the Java equivalent).
It is very hard to explain the basic concepts when the IDE forces you to work in a certain way.
I think that the first language students learn should be functional language such as C. This way you have less layers of abstraction between them and the basic CS concepts.
Agree with cfeduke.
I looked at the work for the same CS courses I did from 2 years previously, and they were way harder. 5 years previously, way way harder.
The CS bar is being lowered more and more, presumably because there are more and more jobs that don't require any working knowledge of any of the complicated CS subjects. There are huge numbers of jobs for people to just cut code.
Since traditionaly people who wanted to be programmers did CS courses as coding has gotten easier this is still the case.
What really needs to happen is for CS to not be a requirement for professional software development. Instead there needs to be another curriculam that focuses more on getting people out the door and cutting code.
This would leave CS to be that course for you next generation of tool builder.

Alice and Scratch ages 8+, how about under 8yrs old? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 8 years ago.
Improve this question
I just found out about Alice and Scratch. I will be implementing those pretty soon. But, I wonder, what would be good material for kids from 1st grade thru 4th/5th?
Toontalk is something to look at. I used it successfully with group of ten- to eleven-year-old children, and it's been used with much younger kids. Of course, I think Scratch has too. But Toontalk is specifically built to feel more like a game. It's essentially a 3D world that kids can explore and interact with, and in which they create programs by training robots. Highly recommended.
http://www.toontalk.com
http://playground.ioe.ac.uk/ABOUT.HTM
http://playground.ioe.ac.uk/games.htm
The Toontalk 3d environment ingeniously operates as a metaphor for sophisticated programming concepts. There are quite a few academic papers linked on Toontalk site about the educational theory behind Toontalk. Here's one interesting paper that describes how the Toontalk 3d objects map onto abstract programmming concepts.
I'll admit, I'm not a professional educator. And my info on kid's programming education may be too obsolete, but my mom was as close as they came to a computer educator in the 1980s, and here's some tricks from her book.
When I was 8, she had no problem teaching me logo
I would think that before reading skills are somewhat developed, it would be hard to teach the semantics of any programming language - however simple. And the first "aha!" for programming (to me) would be realizing that if you give really simple commands to the computer, it will do neat stuff for you.
If I had to teach kids that were still working on reading fundamentals, I'd probably focus it on games that are not directly connected to a programming language, but which do involve logic development. Things like:
Assigning letters to codes and translating from letter to code
Games where you follow simple rules to move things around, emulating data structures.
Puzzle games making use of computer science concepts - like shortest path algorithms. Not in analyzing the algorithm, but in developing it in the first place.
I'm afraid I don't know of a pre-built set of material for this sort of stuff. But I think that you might be able to create your own.
The limits would be the cognitive abilities of the kids -- I know that there are certain points where the theories say that kids can't do certain types of abstract concepts. For example, I was just listening to an example that mentioned that pre-schoolers can't handle the idea that something may have more than one name. Not quite knowing where those points of cognitive growth typically occur, I'm not 100% certain of what game would be right for what age group -- it might be trial and error.
I use Alice to teach children ages 11-14. It works well for them, but I would not use it for children much younger than that unless it was a one-on-one situation. I can't speak for Scratch.
One thing I can speak for though, is Lego Mindstorm programming. There is a cost to it, unlike Alice and Scratch, but it is very approachable for 1st through 4th grade. See if the First Lego League has a group near you so you can join up with others to help with costs.
Scratch is the simplest programming language I have found for kids. You can use it like logo, but it is much nicer.
I think Alice is too hard for kids of age 8 years.
Microsoft has also Small Basic and shipped v0.2 recently.
This version also includes a cool new
feature that allows students to easily
graduate from Small Basic to Visual
Basic with the touch of a button.
Check out the full release notes in
the Small Basic blog.
Small Basic is a project that's aimed
at bringing "fun" back to programming.
By providing a small and easy to learn
programming language in a friendly and
inviting development environment,
Small Basic makes programming a
breeze. Ideal for kids and adults
alike, Small Basic helps beginners
take the first step into the wonderful
world of programming.
Download and for more information : MS Small Basic v 0.2
When I was really small we were taught things that have similarities to programming but aren't quite programming, games with puzzles to solve, tangrams, and even choose-your-own-adventure writing programs. Later we learned LOGO.
There are some systems like toontalk, but to do anything like programming, you need to cope with sequence - this follows that, follows that, follows that - and basic arithmetic. Which is why 8+.
Younger, you want the children you work with to either have a good sense of what sequence might be - say from following instructions - and to be supported by a good interface, where drag and drop isn't as fiddly as scratch.
RoboMind is a simple educational programming environment with an own scripting language that allows beginners to learn the basics of computer science by programming a simulated robot.
In addition to introducing common programming techniques, it also aims at offering insights in robotics and artificial intelligence. RoboMind is available as stand-alone application for Windows, Linux and Mac OSX. It is free and open source.
Worth to give a try!
www.robomind.net