Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

dantastic

macrumors 6502a
Original poster
Jan 21, 2011
572
678
I have been a full-time iOS Developer for a number of years now. I came from a JAVA background and I have been messing a bit with PHP, PERL and JavaScript in recent years.

I want to branch out a small bit, get a few more tricks into my bag. What would be a good idea to learn? I'm thinking a web language really.

Ruby on Rails seems to be gaining popularity, rightfully so or just a fad?
 

North Bronson

macrumors 6502
Oct 31, 2007
395
1
San José
I feel like C++ would be a great second language for a pro iPhone developer to be completely comfortable in. I see plenty of libraries and projects built with some amount of C++. Being able to jump in and quickly know what's going on or add or remove code would be great.
 
  • Like
Reactions: moonman239

ArtOfWarfare

macrumors G3
Nov 26, 2007
9,561
6,059
Python.

I will warn you though: once you're competent with Python, you will hate every other high level language for how limited their libraries are, or how frustratingly difficult they are to work with, or how limited and obscure their syntaxes are.
 

PhoneyDeveloper

macrumors 68040
Sep 2, 2008
3,114
93
Depends on what you want to develop.

For web apps I would recommend Grails/Groovy. Java developers prefer Groovy to Ruby because Groovy syntax is similar to Java syntax.
 

dantastic

macrumors 6502a
Original poster
Jan 21, 2011
572
678
Groovy looks like a good option. The syntax looks familiar and easy to digest. Seems to have a sound industry following.

Python is not a bad pick either. Maybe not as 'hot' right now though. Not a reflection of its capabilities as a language, just more what it would do to my CV...
 

ChristianVirtual

macrumors 601
May 10, 2010
4,122
282
日本
agree with ArtOfWarfare: Python is quite nice; i use it for some internal stuff and is rather easy (though sometimes I still struggle with the right intend levels; but thats just lack of practice)

And I start to like Swift (ok, not really web)
 
  • Like
Reactions: AdonisSMU

Michael CM1

macrumors 603
Feb 4, 2008
5,681
276
agree with ArtOfWarfare: Python is quite nice; i use it for some internal stuff and is rather easy (though sometimes I still struggle with the right intend levels; but thats just lack of practice)

And I start to like Swift (ok, not really web)

I took a few programming classes in college on C. I later worked at a job where I learned some CSS and Django. I'm trying to get started using Swift because I need to learn by seeing and repeating. That's how I got Django down a bit. Template had something, I figured out logic and then fixed. Unfortunately that included a ton of HTML, which is a lot simpler since I've seen it a lot.

So I started a quick "build your first barely functioning app using Swift" video before I had to stop. Just time stuff. I'm hoping I can pick up enough to develop something -- I have some reference app ideas -- but I have never been able to parlay my quick learning and desire to make software into actually doing it.

I haven't a clue how some of you guys know so many languages. The changes between C and C++ were enough to fool me. Swift looked a little more obvious in the quick read I gave part of a manual when it was released. I'm just worried about the time to recall logic and convey it to Swift.
 

AdonisSMU

macrumors 604
Oct 23, 2010
7,298
3,047
Python, Rust, Javascript (mainly because it's so popular not because it's as good as it could be)

I think Javascript actually suffers because of the standards process and the whole too many cooks in the kitchen scenario. I don't hate it and it's easy to get started with it because of the browser but I think Python is prettier and more performant. Rust obv has the perf advantage over the others and recently hit 1.0.

I'm a front end guy and took a job at a Python shop to immerse myself in the language. The last place I worked I learned more Java and JSP type stuff but hate JAVA with a heated passion.

So far I am not a big fan of Django web framework. The documentation is cryptic at best and looking for answers to questions on the web is a pain if you are using Django.

I can see why PHP took off. It has better documentation than pretty much everyone. Javascript/Nodejs is quickly becoming the language of the web. I think it could replace PHP TBQH.. I think that's where we are headed but it's too slow for programing outside of that use case.
 
Last edited:

moonman239

Cancelled
Mar 27, 2009
1,541
32
C++. It's one of the languages of Unix developers. Certainly, it provides a different language you could use while programming, and you can make your C++ code and Objective-C code play nicely. And if you ever want to get more technical with your apps, you'll probably want to use C++. Why? Well, for one thing, there are all these libraries you can use. Want to create MPEG audio files? You can use ffmpeg. Of course, a lot of the libraries aren't compiled for the iPhone - just download the source code.
 

1458279

Suspended
May 1, 2010
1,601
1,521
California
I haven't a clue how some of you guys know so many languages.
Depending on the type of work you do, the language(s) may matter less and less.

Consider: in iOS you can write an app with very little code. You can control flow with storyboard and use the APIs to do a huge amount of work.

Compare that to programming a custom video compression routine from scratch in C.

Point: Programming is not what it was many years ago where quite a bit was "from scratch" or maintaining someone else's code. The more work that comes from an API (the less code you need to write from scratch), the more you become dependent on someone like Apple and less on some other programmer that found a better paying job and left you with convoluted code.

Again, this really depends on where you want to go, some projects can't be done with heavy usage of stock APIs because of cost/functionality/etc...

Languages are pretty much just syntax. The real knowledge is usually in the runtime, APIs, creative and logical thinking. More and more, a good IDE (like Xcode) will help you more and more in remembering syntax and API calls.

Maybe Google will understand this and make a dev platform like Apple did.
 

Michael CM1

macrumors 603
Feb 4, 2008
5,681
276
Depending on the type of work you do, the language(s) may matter less and less.

Consider: in iOS you can write an app with very little code. You can control flow with storyboard and use the APIs to do a huge amount of work.

Compare that to programming a custom video compression routine from scratch in C.

Point: Programming is not what it was many years ago where quite a bit was "from scratch" or maintaining someone else's code. The more work that comes from an API (the less code you need to write from scratch), the more you become dependent on someone like Apple and less on some other programmer that found a better paying job and left you with convoluted code.

Again, this really depends on where you want to go, some projects can't be done with heavy usage of stock APIs because of cost/functionality/etc...

Languages are pretty much just syntax. The real knowledge is usually in the runtime, APIs, creative and logical thinking. More and more, a good IDE (like Xcode) will help you more and more in remembering syntax and API calls.

Maybe Google will understand this and make a dev platform like Apple did.

Thanks for the input. I'm much more of a visual learner, so when I took a programming course in the late 1990s and I think our second lab was to write a program that would calculate the square root of a number, it wasn't helpful. I took the same course at another college and while a little bit better, I still didn't grasp stuff enough to want to continue.

But I did learn a good bit getting thrown into it a few years ago in a job. I can't recall if I mentioned how much I ended up hating the position due to other reasons, but it was freaking awesome comprehending the django code (and some HTML, CSS and other stuff inside these files) to do things that a couple of years before we had been controlling with CRAPPILY CONCEIVED BROWSER-BASED PAGES. But unfortunately after I changed jobs again, the company eventually started laying off anybody who had talent in that and outsourced everything.

However, Swift and the ongoing learning about APIs -- I had no idea what they were before the App Store -- has made me want to at least make a demo app that does something simple on my phone. I don't plan on making a career out of it unless I get lucky and/or good quickly and then I'd be stupid not to. I'm quite creative, so if I was just a code monkey I would be miserable.

I'm getting the sense that the earlier days you had to know way more (and do more) programming, kind of like creating a custom operating system for a computer. Then slowly the field has moved up to UNIX/DOS-like environments and is now progressing into Windows/Mac OS GUI environments. (Aside -- I wonder what the Cisco classes I took would be like now, and yes I forgot about all of it) The SDKs basically seem like parts for a computer, and as a developer you pick the right parts, maybe use a larger hard disk or faster graphics card, and your job is to plug them together. It's oversimplification, but I think you helped me understand it some.

I've got a work project that would be great for a simple menu-based app for me to develop. Basically like an old-school web page with a table of links that you can drill down into. Not pretty, but I would learn something. So again, thanks a bunch. I appreciate the sharing of knowledge!
 

1458279

Suspended
May 1, 2010
1,601
1,521
California
I'm getting the sense that the earlier days you had to know way more (and do more) programming, kind of like creating a custom operating system for a computer. Then slowly the field has moved up to UNIX/DOS-like environments and is now progressing into Windows/Mac OS GUI environments. (Aside -- I wonder what the Cisco classes I took would be like now, and yes I forgot about all of it) The SDKs basically seem like parts for a computer, and as a developer you pick the right parts, maybe use a larger hard disk or faster graphics card, and your job is to plug them together. It's oversimplification, but I think you helped me understand it some.

It's not so much that we had to know way more, it was just more topics. Back in the day, you were usually expected to know networking, data server, programming, etc... We didn't have graphic designers or UI/UX designers and the APIs were pretty straight forward. Now, developing an iOS app requires understanding of HIG, UI/UX, programming, and at least a few APIs.

The profession of programming has not only gone from "the computer guy" to "the programmer" but all the way to specialized types of programming (gaming, utility, business, etc...) One of the biggest trends is moving away from "full stack" to specialized in depth knowledge. Another trend is toward more automatic functionality of some areas. We used to have a database professionals, now, a lot of database is just an add on for the programmer.

It's certainly a profession of non-stop learning and large job growth. Never seen tech take such a hold over the economy as mobile has. Even DotCom wasn't this aggressive, and DotCom changed the world.
 

Michael CM1

macrumors 603
Feb 4, 2008
5,681
276
I got quite frustrated in a two year program when basically to get a job you needed to know everything, but to know everything you needed a job. In about three months I forgot enough CCNA stuff to not pass the cert exam. Any job in networking wanted you to have like five certs and three years of experience, hence why I fled. Journalism is worse than that now, but they do seem to let anybody who can type get a job at some places.

It'll definitely be interesting to see if I can learn a thing in the limited free time I have. I never did like the teaching style of any programming class I took. With the right instruction I could probably learn anything, but I never did find that.
 

1458279

Suspended
May 1, 2010
1,601
1,521
California
Another issue with the job market has to do with the "number of years" problem. Not only do you have to deal with the popularity of a tool/platform/language/... but the number of years is a big problem as well.

This is the way it works. When iOS/ObjC became popular some 5 years ago, they were asking 1 year. Now they ask for 3 years or more. So, unless you started 3 years ago, you're stuck. 3 years from now (assuming iOS is still popular) they'll be asking for 5 years exp.

Not only that, but what if ObjC is dropped and Swift takes over? What if there's a 3rd party platform that runs well on iOS/Android/WP and becomes popular?

We've seen so many changes over the years. Microsoft told us Visual FoxPro was the future of business software development, Borland told us it was Visual dBase, Computer Assoc told us it was Visual Objects.

One upside is that a skilled developer and quick learner, can fake the "number of years" and offer proof of skills. It's common for someone to submit code or an app as proof of skills. A team should be able to see if they are a "cut-n-paste" programmer or if they understand the concepts they are using.

I've seen many use OO as something that gets in the way of them doing what they want to do. They see it as a set of rules they must follow, without understand why it's done the way it's done. This usually happens when they start out wanting to "make an app" instead of learning the profession of computer programming. Same thing with a business that would just as well take the shortest path to making money instead of setting out to develop something long term. This is one of the reasons the app store is flooded with garbage apps.
 

akimoriRyuuji

macrumors regular
Jun 28, 2015
115
84
I would honestly consider delving deeper into Javascript. You didn't say how much time you spent in it, but HTML5/JS is definitely the way to go.
 
  • Like
Reactions: AdonisSMU

ArtOfWarfare

macrumors G3
Nov 26, 2007
9,561
6,059
you'll probably want to use C++. Why? Well, for one thing, there are all these libraries you can use. Want to create MPEG audio files? You can use ffmpeg. Of course, a lot of the libraries aren't compiled for the iPhone - just download the source code.

This is hilariously wrong. This is why I tend not to use C/C++/Obj-C - it's difficult to find libraries, difficult to make your project compile with the libraries, and difficult to find reliable documentation. You're better off building the entire program from scratch - it'll take less time than trying to overcome those challenges.

Use Python. The standard library is massive. If you want to create MPEG audio, it's part of the standard library. XML, JSON, or HTML processing? Part of the standard library.

More picked at random:
Picture Manipulation
POP/IMAP server/client
FTP server/client
GUI (Tkinter and/or Curses)
Authenticate and download files from the internet
Download and install additional modules at runtime with PIP

The standard library is great because it's extensively documented.

Finding and installing additional modules via PIP is super easy. I've found modules for handling SSH, SFTP, Keychain Management, and numerous other things.

The only potential drawback is that some people writing these non-standard modules fail to document them. Even then, though, you can type in help(<module name>) at the Python console and it'll tell you everything it can about the module, by pulling out the names of all the variables and any comments in the file.
 
  • Like
Reactions: AdonisSMU

moonman239

Cancelled
Mar 27, 2009
1,541
32
This is hilariously wrong. This is why I tend not to use C/C++/Obj-C - it's difficult to find libraries, difficult to make your project compile with the libraries, and difficult to find reliable documentation. You're better off building the entire program from scratch - it'll take less time than trying to overcome those challenges.

Use Python. The standard library is massive. If you want to create MPEG audio, it's part of the standard library. XML, JSON, or HTML processing? Part of the standard library.

More picked at random:
Picture Manipulation
POP/IMAP server/client
FTP server/client
GUI (Tkinter and/or Curses)
Authenticate and download files from the internet
Download and install additional modules at runtime with PIP

The standard library is great because it's extensively documented.

Finding and installing additional modules via PIP is super easy. I've found modules for handling SSH, SFTP, Keychain Management, and numerous other things.

The only potential drawback is that some people writing these non-standard modules fail to document them. Even then, though, you can type in help(<module name>) at the Python console and it'll tell you everything it can about the module, by pulling out the names of all the variables and any comments in the file.

Not to mention there's PyObjC for going back-and-forth between Python and Obj-C. Does PyObjC use the same standard library on Mac and iOS as the regular Python interpreter does? If not, is there an easy way to get everything the Mac's standard library offers on iOS? If so, I just might want to start using Python in my apps, at least where the benefits of using Python outweigh the costs.

In my opinion, Python is more useful if you're just looking for the shortest path from idea to completed program. If I wanted a simple server, I'd go with Python. If I wanted to build a 3D game, I'd choose a C variant to avoid overuse - or inefficient use - of RAM and CPU, because a Python program can always be beat by a C/Obj-C/C++ program in terms of computational efficiency.
 
  • Like
Reactions: ArtOfWarfare

ArtOfWarfare

macrumors G3
Nov 26, 2007
9,561
6,059
Not to mention there's PyObjC for going back-and-forth between Python and Obj-C. Does PyObjC use the same standard library on Mac and iOS as the regular Python interpreter does? If not, is there an easy way to get everything the Mac's standard library offers on iOS? If so, I just might want to start using Python in my apps, at least where the benefits of using Python outweigh the costs.

Isn't PyObjC a Python module? It's not a special interpreter... it's just a module that lets you use Cocoa frameworks within Python.

In my opinion, Python is more useful if you're just looking for the shortest path from idea to completed program. If I wanted a simple server, I'd go with Python. If I wanted to build a 3D game, I'd choose a C variant to avoid overuse - or inefficient use - of RAM and CPU, because a Python program can always be beat by a C/Obj-C/C++ program in terms of computational efficiency.

For a 3D game, I would use Unity and set the language to Boo. Boo offers similar syntax to Python.

For other scenarios where high performance is necessary, go with pure Python initially. If it's not running as well as you like, profile the program, identify the troublesome code, and you can try pure Python optimizations, like swapping from using a __dict__ to __slots__ (this reduces the memory footprint of objects and speeds up setting/getting attributes, but takes away the ability to dynamically add new attributes, by changing the implementation of object attributes from a dictionary to a tuple). If that's still not fast enough, move that troublesome Python code to a C module.

Writing your entire program in C, or using __slots__ everywhere, from the get-go, is premature optimization. Don't contort your code to go as fast as possible, sacrificing flexibility and readability, until you know the optimization is really necessary. And then don't over optimize it. Do as little as you can to meet your requirements (and if meeting your requirements isn't good enough, you're not very good at setting requirements.)
 

moonman239

Cancelled
Mar 27, 2009
1,541
32
Isn't PyObjC a Python module? It's not a special interpreter... it's just a module that lets you use Cocoa frameworks within Python.



For a 3D game, I would use Unity and set the language to Boo. Boo offers similar syntax to Python.

For other scenarios where high performance is necessary, go with pure Python initially. If it's not running as well as you like, profile the program, identify the troublesome code, and you can try pure Python optimizations, like swapping from using a __dict__ to __slots__ (this reduces the memory footprint of objects and speeds up setting/getting attributes, but takes away the ability to dynamically add new attributes, by changing the implementation of object attributes from a dictionary to a tuple). If that's still not fast enough, move that troublesome Python code to a C module.

Writing your entire program in C, or using __slots__ everywhere, from the get-go, is premature optimization. Don't contort your code to go as fast as possible, sacrificing flexibility and readability, until you know the optimization is really necessary. And then don't over optimize it. Do as little as you can to meet your requirements (and if meeting your requirements isn't good enough, you're not very good at setting requirements.)

I'm not going to pretend I know more than you, but doesn't Python's being an interpreted and easy-to-use language make C programs better for high-performance tasks? After all, some sacrifice has to be made when using Python. I think performance is one.
 

ArtOfWarfare

macrumors G3
Nov 26, 2007
9,561
6,059
I'm not going to pretend I know more than you, but doesn't Python's being an interpreted and easy-to-use language make C programs better for high-performance tasks? After all, some sacrifice has to be made when using Python. I think performance is one.

Yes, and I acknowledge that in my post. The difference between what I'm saying and you're saying is I said you can write an individual module in C while you're suggesting writing the entire program in C. Python is capable of connecting with and using modules written in other languages, if for whatever reason you need to write some of your code in another language.

Possible reasons might be you want to use a specific SDK or API but it's only provided in another language, or because performance of that particular module is of the utmost importance and it needs to run faster than it could if it were written in Python.

Note that I've never actually done this sort of bridging activity myself, I've just heard that it can be done, and I know a prime example for it is that some of the core built in functions and classes are written in C.

Here's the documentation on how to do this (they're called "Extension Modules") - https://docs.python.org/2/extending/extending.html

If you don't know which version of the Python interpreter you're using, you're using CPython. That's by far the most common ones. The next most common one, if I'm not mistaken, is Jython (a Python interpreter written in Java instead of C. There are others for Ruby, C#, JavaScript, and even one for Python. So you can run your Python code within an interpreter written in Python.)
 
Last edited:

moonman239

Cancelled
Mar 27, 2009
1,541
32
Use Python. The standard library is massive. If you want to create MPEG audio, it's part of the standard library. XML, JSON, or HTML processing? Part of the standard library.

More picked at random:
Picture Manipulation
POP/IMAP server/client
FTP server/client
GUI (Tkinter and/or Curses)
Authenticate and download files from the internet
Download and install additional modules at runtime with PIP

The standard library is great because it's extensively documented.

Finding and installing additional modules via PIP is super easy. I've found modules for handling SSH, SFTP, Keychain Management, and numerous other things.

Follow-up question: In Python, is there a way to scan a document using any Bonjour-connected scanner? I realize there's PySANE, but I don't think it's what I'm looking for. The SANE Project's Website doesn't even list my scanner as a compatible device.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.