Archive for January, 2007

6 Web Design Tips for Beginners

I’m a newbie in a number of things, and web design is one of them. I created my first real web page just a few days ago, though I’ve been tinkering with my own website for quite a while. (No, I’m showing it to you, yet). But I’m a fast learner as well. So before I move on from newbie to intermediate, here are some things that I’ve learnt, which might be useful to beginners.

1. Use simple tools

Many people, both beginners and experts, think that the bigger and more complex your tools are, the better you will be at something. Wrong! The problem with complex tools are that they take time to learn. As a beginner, your priority is to learn web designing, i.e. the proper use of HTML, CSS and graphics to get what you want. You’ll only be wasting your time if you try learning a tool without learning the basics first. Remember that the various IDEs and other tools are written for people who already know what they are doing and just want to make their work cycle more efficient. I would personally say that you only need three things: a text editor, a browser, a HTML validator (more on that later). A corollary to this is that you should learn to write HTML and CSS and not rely on a WYSIWYG editor.

2. Validate your code

Always write web pages that conform to the W3C standard. And once you finish making a page, make sure you validate it and correct any errors. Avoid the use of deprecated tags, they have been deprecated for a reason and their replacements are mostly better solutions.

3. Learn some graphics editing.

The modern internet is very much graphical in nature and it’s going to stay that way. HTML and CSS can take you a long way, but they certainly have their limitations. If you want to make professional-looking web pages, you’re going to have to learn to do some graphics. You don’t have to become a digital Picasso, just learning how to make good buttons, headers and backgrounds and how to use gradients and color combinations will take you a long way. That doesn’t mean that you have to go shell out $600 for PhotoShop, just use the GIMP, it’s free and can do pretty much whatever PhotoShop can. There’s a good starting point here.

4. Learn Liquid Design

Computer resolutions range from 800×600 to 1600×1200. Making sure that your web page looks the same in all of them may seem daunting, but it can be done without much hassle if you make your designs liquid. Liquid design mostly involves expressing sizes in terms of a percentage of the screen size, rather than something fixed like the number of pixels. Of course it gets harder when you throw graphics into the mix, but it is possible to get a good mix of hard and liquid elements. This might sound like an advanced technique, but in truth it is just a good habit and like all good habits, the faster you start the better. And it will save you from worrying about compatibility across resolutions. This site should give you some ideas.

5. Plan Ahead

Don’t start making a site on whim. Do some research and make a good design before you start. Know what content the site will have, what visitors might be looking for and decide if it’s going to be heavy on graphics or focus on textual information. Also fix the color schemes and navigation layout you’ll use before starting. Planning everything together will let you use your time more efficiently and will make sure that you’re not constantly tinkering and changing things without actually finishing your project.

6. Use the Internet

There are a lot of well-designed websites out there and even more badly designed ones. Take a look at both types, learn from there mistakes and successes and apply that knowledge to your own context. There are also a large number of tutorials and guides on all aspects of web design, find them, read them and use them. Above all, show your works-in-progress to other people, get their feedback and try to incorporate that into your design.

Perl vs Python: Why the debate is meaningless

Competition is a common thing is hackerdom, and arguments over which one of two (or more things) is the better are common and keep coming and going (but never really go away). Some of the most common ones are: Java vs C#, Emacs vs Vi (and it’s clones), Linux vs BSD, Closed Source vs Open Source and everyone’s favorite: Microsoft vs everyone else. And the internet is littered with evidence of these great wars (which none too rarely take on epic proportions) and some digging will throw up evidence on forums, website, bulletin boards, Usenet archives and of course, blogs. Today I’m taking a look at one of these wars that I’ve had personal experience with: Python vs Perl.

The last few years of my life have been filled with an as yet unfulfilled to learn some real programming (see last post). A few months ago I sat down to really learn Python, because I had a read a lot online about how it is a great beginner’s language (though I’m not really a complete newbie at this point). Anyway, I’ve been at it for a while and I’m liking how things are going.

But before I had started Python, I had a brief brush with Perl a year ago. At first glance it seemed something I had dreamed of. After struggling through memory management in C++ and Java and sitting through long compile times (which are really irritating if you’re a new programmer making lots of mistakes), Perl’s write and run was a dream and built in memory management made me a lot happier. But it didn’t take too long for me to get dissatisfied. Reading other people’s code was never very easy and variables behaving differently in different contexts was not something that I liked. I left Perl in just over a month.

Looking for an alternative I quickly found out about the Python vs Perl debate and was especially inspired by Eric Raymond’s Linux Journal article. I started Python and quickly fell in love with it. It had all the things I liked in Perl, but none of the eccentricities that I had wanted to leave behind. For a long term I didn’t give Perl another thought. But being the avid netizen, open source fan and linux lover, I kept reading about Perl here and there. So, last December, I decided to look into Perl again.

What I found out since then is that the Perl vs Python debate is rather like apples vs oranges. One of the biggest complaints about Perl is that it is untidy. Perl’s philosophy of “There’s More Than One Way To Do It” means that there are numerous ways to twist your code syntax around and it can be made absolutely unreadable. And it’s not just the syntax. Perl’s later features, especially object-orientation, have a distinctly kludge-like feel about them, as if they were simply slapped on later rather than integrated. Python, on the other is much cleaner and better designed. But there’s a twist to this tale. It’s this: Perl and are Python are very different languages.

Firstly Perl was not meant to be a general purpose language. It was meant to be a sort of shell-script on steroids. It’s a glue language, aptly called a Swiss Army Chainsaw. If you have a myriad of different programs and data sources and all you need to do is bind them with the electronic equivalent of duct tape, use Perl. Keeping Perl to it’s original uses makes most of the problems disappear. You don’t come into contact the kludginess of more advanced features because you will rarely (if ever) use them and readability isn’t so big a problem, because your programs will not genrally be more than a hundred or two lines.

Python on the other hand, is a more general purpose language. Features like object orientation are better implemented because you’re expected to use them all the time. And there is a definite emphasis on writing clean code because your programs will be big with complex tasks, not just delegating to other programs.

So the final word is this: choose your tools carefully. If you need something that will update a web page with a list of recently played songs, use Perl. A good example of how to use Perl effectively would be Xterminus’ changes page, which uses a Perl script to gather data from his del.icio.us account and his wiki software and create a pure HTML page. If you want to write anything with more than a few layers of abstraction and of more than medium complexity, grab Python. If you have any experience with these two, let me know.

Tomorrow’s debate: Emacs vs Vi

Update: I had said above that I found memory management in Java and C++ tedious, I admit that was something of a typo. I hadn’t meant to say just C++. Thanks to Digg and Reddit users for pointing this out.

The 5 year programming plan

I’ve been trying to learn programming for a number of years and I really haven’t gotten too far. My first brush with programming was with BASIC and I never learnt much beyond FOR. My first real programming language was Java. I learnt some more, but nothing beyond simple inheritance. On the way I tried twiddling with C++ and failed miserably (I won’t go into details). The reasons for my failures were numerous, including bad teachers, bad syllabi and my own inability to settle down with a good text-editor rather than IDE-hopping. But enough is enough. I’m finishing school in a few months and then I hope to get a Computer Science degree in college. So I’m starting a 5 year plan to really learn programming starting now and going upto 2011 when I graduate.

Before I outline the plan, here are the basic premises on which the plan is based: I should learn at least one programming language and one programmig tool each year. By “learn” I don’t mean knowing everything that there is to know about the language, or learning all the available extensions and toolkits that are available. By the end of the year, I should be able to write significantly large program without having to lookup documentation too regularly. I should also be able to read other people’s code and understand what is going on without much difficulty. As part of my project, I’ll also be implementing at least one large project. As you may have realized by now, all this leaves room for a certain amount of ambiguity and interpretation, but that’s ok for me, because I think that it’s good to have some amount of flexibility in one’s plans. Without any delay, here goes:

2007

  • Languages: Python/Perl/Shell Script
  • Tools: Emacs
  • Project: A PIM with internet backup and synchronization

2008

  • Language: Java
  • Tools: Eclipse
  • Project: Undecided

2009

  • Language: C/C++
  • Tools: Undecided
  • Project: Perhaps some sort of Databsse application

2010

  • Language: Ruby
  • Tools: Rails
  • Project: Perhaps a reimplementation of my previous apps to a web framework.

2011

  • Language: LISP
  • Tools: SLIME
  • Project: Undecided

As you can see, there is a fair amount of stuff that is currently undecided. I intend to fill in the blanks as I learn more abouot the langaguages and programming in general and where to use what. Another thing that i should mention is that since I’m going to be using Emacs, I suppose I will have to dabble in Elisp a bit, but I’d like to keep it to a minimum until I actually start learning LISP. If you’re a programmer and have had experience with anything listed above, any advice would be welcome.

One Calendar to Rule Them All

Gather round boys and girls, and let me tell you a tale of frustration, anger, moments of joy and a great journey in search of the perfect time-management tool. Let me tell you a tale of online calendars.

I’ve been looking for the perect calendar for quite a while. My first round of searching took me to HipCal, Kiko and Google Calendar. But I didn’t like them. HipCal had too few features, Kiko was cluttered, Google Calendar had just been released and was horrendously simple. I tried using to-do lists like Remember the Milk instead, but I realized that I needn’t a calendar. Being a full-time student, I need a way to divide the day into portions for various subjects. I needed something that focussed on the time and the day, not just on the task. I needed something with color coding, which allowed easy grouping (preferably with tags) but could show multiple groups together. So I went back to my search and finally settled with 30boxes. It was a really nice product. Adding things was extremely simple using natural language in the Add bar, you could use colors and tags and the user interface was sleek, efficient and good looking. I was happy.

Along the way, I heard about a new startup called Scrybe. I signed up to be added to their private beta and promptly forgot about them in a few weeks. I stayed with 30boxes for about 3 months before something unexpected happened. A few days ago I suddenly got an email from Scrybe informing me about their progress. Like I said, I had forgotten all about them, but the email made me remember. I decided to check out Scrybe again, and I liked what I saw. The only real source of information about what Scrybe offered was a movie on their site. I watched the movie (I hadn’t seen it before) and it hooked me. Scrybe had everything that I had gradually felt missing in 30Boxes: Drag and drop reordering of events, a smart day view, and a proper to-do-list that integrated perfectly with the calendar. Over the last few months I had gradually become dissatisfied with 30Boxes. The ease of adding an event to the calendar was in sharp contrast with all the trouble one had to take to reschedule or reorder an event. The trouble with only one view was that it was hard to concentrate on events for a single day. And there seemed to be almost no co-ordination between the to-do list and calendar.

So I started searching again. This time my general requirements were the same as before. But with that I needed simple drag and drop reordering of events. Anything that needed me to manually change the times was out. I looked at HipCal and Kiko again. Kiko had drag and drop, but it was buggy. HipCal didn’t. I took a look at Planzo, it’s use of drag and drop were what I had been looking for, but it lacked in other more important ways: color coding was done by using groups, but I found no way to add new groups or to change the old ones. I checked out SpongeCell and to my great horror it said that my Firefox 2.0 was unsupported. At this point I was seriously thinking about going back to 30Boxes and making do with what it had, until Scrybe finally came out of private beta.

Upto that point I hadn’t really considered Google Calendar. I remembered having rejected it the first time, but for some reason, I couldn’t quite remember exactly why. Finally I decided to give it try. After all, I had once rejected Google Reader and now I use it exclusively for all my feeds. So I went back to Google Calendar, and behold! it was just what I was looking for! It had matured quite a bit. There was kinkless drag and drop functionality, the individual day view was awesome and the interface on the whole was the definition of sleekness. Although it didn’t quite support tags, the multiple calendars feature, each with it’s own color, combined with the option of showing all or only a few of them at a time was enough for my needs. Once again, after a long time, I was happy.

And that it is where the tale ends. Google Calendar is my schedule organizer and I love it. I am still waiting for Scrybe to be released and when it does, I will give it a try. But it will have to be incredibly good to lure me away.

Other Programming Languages for the Java Virtual Machine

Did you think the Java Virtual Machine was only for running Java programs? Think again. There’s a reason it’s called a virtual machine. By itself, the JVM doesn’t run any Java code. All Java code must first be compiled into bytecode which is then executed by the JVM. This system means that any programming language that can be compiled into bytecode can be used with the JVM. What follows is a brief list of some other languages that can be compiled to run on the JVM.

1. Java

This is the one that started it all. Java is one of the most widely used languages today, especially in developing corporate back-ends. Predominantly object-oriented, but with a syntax that should be familiar to anyone with some amount of experience with C/C++. It fulfills a wide variety of roles which is made possible due to a large and well-documented API and also a growing number of extensions for a variety of purposes. Being the language native to the JVM, it’s development is in sync with that of the JVM, with obvious benefits.

2. BeanShell

BeanShell is not strictly a language: it is a java interpreter which allows quick execution of Java code without actually compiling it.  However, BeanShell adds features like closures and commands similar to those found in scripting languages like Perl. BeanShell can be easily integrated as part of any Java program allowing it to be easily extended by writing new code without having to recompile. BeanShell is now destined to become an official part of the Java platform which means that it will be faster to extend already written applications.

3. Groovy

Groovy recently launched its 1.0 release and it is meant to be a full-fledged language capable of being used interchangeably with Java. It uses Java syntax but it is dynamic in nature and adds feature that are part of languages like Python or Ruby. Of special importance are its inclusion of both static and dynamic typing, closures and native syntax for lists, maps and arrays. Also of interest is built-in support for markup syntax like XML, which would make it handy for writing AJAX backends.

4. F3

It is a compiled scripting language, with an emphasis on graphics manipulation.  F3 is still in heavy development and has not been officially released. However, it looks promising and is capable of being used intimately with Java itself. It can call Java classes and create Java objects as well as calling their methods. This is certainly something tokeep an eye on if you are interested in user interface design and implementation.

5. Scala

As the website says: ” Scala is a modern multi-paradigm programming language designed to express common programming patterns in a concise, elegant, and type-safe way. It smoothly integrates features of object-oriented and functional languages.” Scala is mainly of interest if you are a computer science student. However it deserves mention because it is not tied to the JVM, but can run on Microsoft’s Common Language Runtime as well.

6. JRuby and Jython

These are implementations of Ruby and Python on the JVM. Though both are entirely usable, each has it’s specialities. JRuby in particular has ambitious goals of being more than just a port: it aims to allow tight integration with the JVM in turn allowing two-way communication between Java and Ruby code. Currently only interpretation is supported, but a compiler is being actively developed. Jython on the other hand has more conservative goals, but a lack of experienced developers with enough time means that it’s implementation of Python is at 2.1 while Python itself is approaching 2.5. So any code containing more recent features will not run.

7. Rhino

Once again, not really a language. It is an engine for JavaScript running on the JVM, capable of running in both interpreted and compiled mode. It is now a part of Java SE, thus making it easier to integrate JavaScript with Java programs and use JavaScript’s features with Java programs.

That’s a brief overview of what’s currently available on the JVM, and there should be something there formost programmer’s needs. In case you want to do the opposite: run Java programs without the JVM, the GNU Java compiler lets you compile Java code directly to machine specific binary.

Google Reader as your homepage

I’ve been on the lookout for a good start page from where I can get all my net-updates at a glance. I’ve tried out a number of the new web 2.0 start pages including Netvibes, Pageflakes and Protopages. Each of them have their own ups and downs. Netvibes integrates my 30Boxes calendar, but it’s feed reader is clunky, requiring you to close it and reopen it when you want to move to another feed. Protopages has better handling of feeds, but no calendar support. And of course all of them are quite heavy and the whole desktop/widget metaphor makes it easy to get distracted and start adding and doing things that you don’t need.

So I started looking around for an alternative. My requirements were simple:

  • Fast loading
  • A sleek look and feel, without clutter or distractions
  • An integrated feed reader that is easy to use
  • Displaying my new emails.
  • Calendar integration with 30boxes

My first thought was to find a way to integrate everything with 30boxes, becuase their calendaring app is great stuff. But that idea didn’t last long, because though they let you pull feeds from other places, there isn’t any real feed reader application. But then I remembered that the reason I was leaving Netvibes because I didn’t like the feed reader. So I decided to go find a good feed reader first and work from there on. And I landed up with Google Reader. I used Google Reader a few months ago, but only for a few days because I wasn’t really online much. Now that I was getting back to blogging and reading blogs, I decided to give it another go. And I was hooked at first sight.

Google Reader sports the same sleek, attractive interface that has wooed Gmail users. It’s simple, but beautiful and it stays out of your way. Adding feeds is simple, just click the “Add Subscription” button, put in the feed URL and hit Add. Google reader also integrates nicely with Firefox meaning that you can use Firefox’s built-in feed recognition system to detect and add feeds from websites you visit, without having to search for the feed URL. You can view all the feeds you are subscribed to in the sidebar and you can group them using tags. For viewing the feed content you can use a list view which is similar to normal email or you can use the Expanded View which shows all the items from that feed together, almost like a normal webpage.

But a good feed reader was only part of my wanted bargain. But as it turned out, the others weren’t far away. 30boxes and Gmail give me feeds of to-do items and new email respectively. That, together with a weather feed from weather.com and one of the latest Arch Linux Packages give me everything I need. My Reader now has three tags: News, Weblogs and Personal, making sure that everything stays uncluttered and perfectly organised and I’m a happier person. Now i’m just waiting for a Scrybe invite so that I can get a better calendaring app.

Combine your Feeds: FeedDigest review

Do you run multiple blogs? But do you want to give your users a single combined feed of everything that you write about?  Do you want to group your photo and bookmarks feeds together into a media feed? If yes, then you should check out FeedDigest, a service that lets you combine multiple feeds. You can then publish them as a single “digest” or you can refine the output by using search strings. Besides choosing the feed name and URI, you can also choose a language, encoding and how to order items. Once that’s done, you can choose from a number of default layout options or even edit the HTML and CSS on your own if you’re feeling adventurous.

Once your done setting up your custom feed, you can publish via standard RSS or Atom, or put it in another webpage using HTML or JavaScript.  You can add or remove feeds from your digest any time you want and you can also download a handy OPML file. The landing page says that startups are down, but it is possible to get in (I’ll leave it to you to find out how). A standard free account lets you have upto 5 digests each of which can use 5 sources; that should be enough for most people. If you need more, there are a number of upgrade options that you can check out, ranging from $12 to $2400.

FeedDigest strikes a good balance between features, customizability and ease of use. It shouldn’t take you more than five minutes from sign up to get your first digest up and running. But if you want something even simpler, without having to sign up, you can head over to Feedblendr. There’s no sign-up required, just put in the feeds you want to combin, hit the big red Blend Your Feed! button and you get RSS and Atom links for your new feed. There are no limits on the number of feeds, but don’t have the customization options of FeedDigest either. It’s up to you to choose which one you want.

If you’re looking for more heavy-duty stuff (like turning normal HTML pages to RSS feeds), check out this list of RSS tools and services. Keep exploring and come back to tell me about your finds.

Can Blogg-Buzz keep buzzing?

Digg has been getting some negative publicity lately because of the way it’s been cracking down on bloggers and self-promotion. So two bloggers, JohnTP and Shivaranjan have decided to start a Digg-like site for bloggers called Blogg-buzz. Here’s what JohnTP had to say about it:

So what can you do in Blogg-Buzz? A lot…you can submit stories in Blogg-Buzz, comment on stories, spy on who is buzzing, find out the Top Buzzers, add friends and even send Private Messages to other Buzzers! So, it can be real fun once you start using it.

Blogg-Buzz can be useful for those who want to find the best content on the Blogosphere as well as for those who want to get extra traffic to their Blogs. And we will also try to improve Blogg-Buzz and make it something more than just a ‘Digg like site’.

Now that’s all good and fine, I personally think that we’ve been needing something like this for quite some time, but the question is, will it work? Firstly, the site design. Besides the fact that it’s orange (which you might love or hate depending on your personal tastes), the site feels a bit cluttered, rather different from the sleek feel one would expect of a news site. However that’s a minor problem, the real challeenges are elsewhere.

One thing to look at is Blogg-buzz’s target audience: bloggers. Being a system made to be used by blogger means that it has no restrictions on self-promotion. While this is a perfectly good, democratic ideal, it’s going to be hard to keep the site from being uttely swamped by self-promotional posts. Blogg-buzz’s modus operandi means that a lot of people will be submitting their own content, a lot of which will be only average. The site managers will have to work overtime to ensure that good content isn’t buried under tons of not so good content.

To do this, there are two things that are necessary: Firstly, a large user base which has the discretion to buzz the right content. This is something that Blogg-buzz lacks at the moment. Of course, it’s still early days and in a few months time, they could get a larger audience. But that’s not enough. Digg doesn’t work just because they have lot’s of users, it works because they have a good algorithm that handles the large amount of traffic that passes through their servers day in day out. Does Blogg-buzz have this? Only partially. Blogg-buzz apparently uses a content management system called Pligg that was heavily influenced by Digg and implements similar features. Now using openly available software and tools is ok by me, but judging by some of the comments on JohnTP’s post, a number of people involved with Pligg are unhappy that Blogg-buzz is not giving due credit to Pligg. That aside, the fact that Blogg-buzz runs off an easily available system means that it might not be long until someone launches a Blogg-buzz clone. And if that someone has corporate backing and manages a revew on Techcrunch by virtue of that corporate backing, Blogg-buzz might not be buzzing for much longer.

The verdict : It’s a really good idea, but the guys behind it still have a lot to do before it becomes a Digg-killer.

Snap Preview: Good or Bad?

WordPress.com recently started offering Snap Preview for all users and you can see it in action right here. In case you don’t know what Snap Preview is, just hover your mouse over one of the links and you’ll find out. Personally, I really like this and it’s something that I’ve been wanting for quite a while. But it looks like not everyone is happy with this. Fellow WordPress.com blogger Lorelle dislikes Snap Preview saying:

I’ve also stumbled across these link previews and find them not just annoying and distracting but incredibly frustrating. My mouse will drift down as I’m reading and suddenly I can’t read what’s underneath the pop-up window. I move my mouse and it goes away, but why should I waste my wrist action on something I don’t want to see?

In fact, she calls it a blight on the Internet. Now though I don’t quite agree with her exact wording I can understand how this can be irritating. And the points that she makes about load times being increased are certainly valid.

After thinking it over, there are a number of things that come to mind. Firstly it is not an essential feature of a blog or website and it never will be. Is it a useful one? That depends on the user. Personally, I like it. I feel that it gives a slightly more “community” feel. After all, links are the heartblood of the internet and I consider Snap Preview to be a healthy improvement on the existing link system. Another thing that Snap has going for it is it’s customizability. You can turn it off for internal links (links on the same site) and more importantly, you can turn off it’s automatic feature and use it only on links you want to. But you need to have the JavaScript for it handy to do that and unfortunately WordPress.com doesn’t provide that.

If you’re running your own website or blog, you might want to give it a try. Sign up and put the JavaScript in your page headers and keep it there for a week. If you don’t like it or if your visitors complain, you can always remove it. As for this blog, Snap Preview is here for the time being, but I’m open to suggestions. If you have a novel way of using Snap Preview, let me know.

Book Review: Beginning Python

Learning a new language (human or computer) isn’t always easy. But it helps if you have a good teacher, who makes things fun as well as interesting to learn. Sometimes a good book can make things a lot easier. I’ve been wanting to learn Python for a good few months now and being the dedicated netizen that I am I turned to the Internet for tutorials and howtos. Though Python documenatation is fairly complete and quite usable if you are trying to teach yourself, it can be rather bland at times. Luckily for me, Beginning Python: From Novice to Professional from Apress came to my rescue.

Beginning Python is written by Magnus Lie Hetland, author of another Apress book, Practical Python and a number of well-written online tutorials which are available at his website. Beginning Python isn’t meant to teach you everything that there is to know about Python or programming. What it tries to do (and succeeds at) is to give you a good head-start from the basics upwards. The book covers a fair amount of matter, starting from the basics of writing simple, small programs to full-fledged GUI applications. Most importantly however, it does so in a pleasing, conversational style. Each chapter is fairly self-contained, dealing with a particular aspect of Python programming, which means that you can learn at your own pace and even skip a few chapters without too much difficulty. But what makes the book stand out from the crowd is that it not only gives a working knowledge of Python, it helps you figure out what to do with that knowledge. The book includes 10 programming projects including things like an XML converter, and internet messaging system, a file transfer program with a graphical frontend and even an interesting little game. Most chapters also come with a set of suggestions at the end about how you can apply what you’ve learned: a great way to keep yourself busy if you’re bored

While the book is called Beginning Python, there is some amount of more advanced information like network programming (including working with CGI and SQL), using GUI toolkits and other practical things like testing, debugging, optimizing and packaging programs. At the same time, it should be noted that the book does not intend to turn you into a complete master: the advanced material is enough to get you up and running, but do not cover the topics in great depth. All things considered, the book will probably be useful to you even after you have a fair mastery of the basics. It’s clean structure and good formatting allows it to be used as a quick reference as well as a textbook.

The book is definitely worth a buy if you’re interested in learning Python but have been keeping it off for want of a good resource. The $45 price tag is a bit steep, but it’s worth it for a book that will take you a long way and will probably still be useful even after a good few months.

Next Page »