I appreciate that their are a lot of factors which might go in to determining the answer to this question.
For a university assignment I am comparing 3 frameworks for multi-platform development. One of the things I need to consider is usability and within that, how easy is it to learn. Are there any quantifiable ways of determining how easy/difficult it is to learn a programming language?
FYI I am comparing Flutter, React Native and a .NET MAUI/Blazor Hybrid. If I was to compares lets say Flutter and React Native then Flutter only really requires a developer to learn Dart and OOP Concepts whereas React Native requires a developer to learn JS, basic HTML and CSS as well as OOP concepts. Now on the face of it, this makes React Native look more difficult to learn, however the general consensus seems to suggest that JavaScript is easier to learn for a complete beginner than Dart. I then need to consider that the developer must learn basic HTML and CSS and how would I determine that having to learn these makes React Native more difficult to learn overall?
Related
I am new to React Native and only recently picked it up, I am using it to make an app for my final year university project, learning the framework as I go using different examples from online.
So far I have been using function components with everything for one component in the same class, eg. view, functions and styles. - So far this has been working and seems to preform efficiently.
My question is aimed at any experienced React Native developers. - Is my current approach of function components a good coding practice for React Native apps or should I be using class components. From my little experience it seems function components are easier and I have done some research that shows function components are becoming more common with hooks etc. - I'm just not sure if its the best approach for a full application.
Another question I have is aimed at design patterns. - Should functionality, view and styles all be in the same class or would it be better practice to split them out and just import as appropriate - similar to Angular. The reason i ask this is because all examples that I have seen/followed up to now take the approach of everything in the same class but that may just be for presentation purposes.
I've been trying to develop a cross platform mobile app, very simple one (DB driven), so I had to chose between PhoneGap, Appcelerator and Rhomobile.
I'm a big fan of Ruby and ROR, so using the same MVC structure and Ruby syntax is a big advantage for me.
Anyways I would like to ask few questions here if any of you guys used it already as it's a very risky decision specially that it is the least known framework among the mentioned above.
Do you know any solid smartphone App that used Rhomobile? this could give it more credibility. I don't wanna invest much time developing the solution then to get refused from apple appstore for some reason or to face any major problem in the production.
Did you notice any performance issues? specially with the UI? as it is not a purely native application (unlike RubyMotion or Objective-C) ?
Do you have any idea of the pricing? for commercial uses? is there any fees or is it totally free app?
Thanks in advance
I have been in the trend of developing RhoMobile applications since more than 2 years. In my opinion, i found this more powerful and stable than other frameworks.
Since you are a ROR/Ruby developer, it's will be lightning fast speed for you to catch the flow. you will not believe that most of the concepts of ROR are available in this framework.
Regarding your queries,
Do you know any solid smartphone App that used Rhomobile? this could give it more credibility. I don't wanna invest much time developing the solution then to get refused from apple appstore for some reason or to face any major problem in the production.
You will find no issue while deploying the app to stores if you just simply follow the basic flow as they have on there documentation. Although it's not as easy to check for the apps based upon the technology used, but this link may help you.
https://developer.motorolasolutions.com/thread/1736.
Did you notice any performance issues? specially with the UI? as it is not a purely native application (unlike RubyMotion or Objective-C) ?
All the Hybrid apps usually have a layer between you coding and the native api, which will any how take some few amount of reaction time, be it Rhomobile, Rhonegap or others.
But as per my experience, same performance degradation have been marked by me, than the native one for all the frameworks.
Do you have any idea of the pricing? for commercial uses? is there any fees or is it totally free app?
If you want to use only RhoMobile. Its free. But if you want to use some advance modules and some core modules, you need to have the RhoElement license for this, which is basically a paid one.
Hope these points help you deciding you best framework.
So I'm new to iOS development and am doing all I can to learn the "best" way to do things. (Yes I know that's a relative term)
I'm coming from a world of C# and Java where we do things like injecting dependancies via an IOC container, use a repository pattern to abstract data access, use domain services and objects to encapsulate business data and behavior, etc. These are things I have yet to see in iOS development. (Maybe I'm looking in the wrong places)
I realize that Objective-C is a superset of C and a dynamic/loosely-typed language which will probably change the game quite a bit when it comes to good designs practices. Can anyone point me in the directions of some books/blogs/other that would help me make this mental leap from a strongly typed, managed environment to this new world while keeping my designs supple and abiding by the SOLID principles?
EDIT - I want to be clear here. I am not asking how to learn the Cocoa framework and the ins and outs of Objective-C as a language. I have found plenty of resources on that. I'm looking to take this to the next level, begin doing TDD and make sure the projects I'm building will be easy to extend and maintain.
The best way to learn the "best" way to do things is by gaining as deep an understanding as possible of how Apple's existing APIs are designed. After all, regardless of what the theoretical best way to do something is, ultimately your code is going to have to work with these APIs, so it makes sense that you should follow similar patterns in most cases.
As far as books go, there is one called Cocoa Design Patterns that covers this exact subject and, based on Amazon review, seems to be well received.
There is a plenty of design patterns specific to the Objective-C and Cocoa development, you will find a very nice summary in this book. It covers language built-in patterns as well as some more complicated and high-level (architectural if you like) patterns.
In general, SOLID principles apply and are no less relevant in a dynamic language as they are in a strongly typed one. The other thing is that in Objective-C you have the option of using strong types in your design so pretty much all "classical" OOP patterns apply, although there may be some framework / language constructs more elegant and suitable for the job.
I recommend you follow the cs193p course and read Learning Objective-C from Apple's website.
I think these two links will point you to the right direction as to how things should work on iOS.
Years ago wanting to write Mac software and having loads of experience with Java WebObjects I tried the java bridge but decided to bite the bullet and learn Objective-C (fortunately since I would have hated having my software deprecated with the bridge). Later I fooled around with RubyCocoa. I learnt Ruby (found it interesting indeed), but found out the hard way that the bridge was far from mature or stable and at the end I ended porting the code back to Objective-C.
Since years have passed, I'm wondering if it is worthwhile investing some time with MacRuby, or even learning Python to use PyObjC. As much as I like Objective-C, I recall being way more productive with the Ruby bridge when it didn't crash. I just would hate investing time to end up with crashy software again.
I would say MacRuby is the way to go if you want to try one of the bridges. It's being developed by Laurent Sansonetti, who's a Senior Software Engineer at Apple working on Ruby.
It's quite functional now, and integrates nicely with the native frameworks. Worth a look, particularly if you already have Ruby experience.
If you want to learn Cocoa programming, ignore the bridges. They will only make writing Cocoa applications more difficult and you will waste a bunch of time getting up to speed.
Specifically, you will need to learn Objective-C to be able to understand both the APIs and design patterns of the system frameworks. Furthermore, all of the documentation and tools are written specifically to support Objective-C.
The bulk of your time in learning Cocoa programming will be spent on said APIs and design patterns; the actual language part is relatively small, by comparison.
Note also that the bridges necessarily incur an impedance mismatch in an attempt to map not-quite-the-same functionality from one language to another.
Frankly, if you know Ruby, then Objective-C should be trivially easy; the object models are very similar.
My personal opinion is use ObjC for Mac native apps.
Use Ruby/Python where they supposed to work good natively without unreliable interfaces with questionable support.
Here is why it is NOT a waste of time. In some cases, Ruby and Python have awesome and well developed libraries that are not available in Objective-C and would not likely be.
That is one of the best use cases.
Example: you wouldn't want to reimplement Rails in Objective-C, (some people might) but you could easily use it, parts of it to power a Cocoa app with MacRuby.
Well MacRuby is dead. There is the commercial RubyMotion.
There is still PyObjc, RubyCocoa and mruby.
One of the other intriguing use-cases is to provide script ability that doesn't stink like AppleScript and OSA.
There are valid reasons.
What are the most valuable parts of Computer Science studies for Cocoa developers?
Another way I might word this question is:
If I’m not going to go to school for Computer Science but want to be a developer working primarily with Cocoa, what are the things I should make sure I learn that I otherwise might miss by being self-taught, and be worse off for it.
Update: Replaced the term "professional Cocoa developer" with "developer primarily working with Cocoa", in hopes that the intent of my question is somehow clearer.
To be clear, I've been working with Cocoa for two years and am comfortable with Objective-C and the Cocoa frameworks, as well as Cocoa design patterns and the developer toolset, and thus am for the most part fluent with the Mac and iPhone platforms. But I have wondered whether I'm missing important CS or SE elements due to being self taught/no formal training, and not coming from other languages or platforms.
This question is for Cocoa developers.
There are many, but things that come to mind imediatly
-Design Patterns (the Cocoa framework relies on many Design Patterns, if you follow them it will make your life very easy, most obvious example is MVC)
-Algorithms and Data structures(this applies to any framework really)
-Memory Management (No garbage collection on the iphone!)
I would question whether there's really such a thing as a "professional Cocoa developer" (from a philosophical standpoint), or if you would want to be one. There's "professional developer", who may work with Cocoa primarily. A professional developer is language-agnostic and as such has a solid career ahead of him/her. A language- or platform-specific hacker has very limited usefulness.
The question to ask is do you want to be a developer or not? If there aren't any good Cocoa jobs available at the moment, or Cocoa is replaced by something newer and better and very different, a professional developer changes gears and follows. Are you OK with that?
If so, a computer science degree definitely cannot hurt. If not, you should probably not put all your eggs in the Cocoa basket and pursue a non-CS degree.
In addition to what's been pointed out already, I highly recommend reading "The Pragmatic Programmer". It contains a wealth of information on how to write software, how to manage projects, and how to develop your career, advice that goes well beyond the documentation you look at every day in Xcode. Some of the topics they cover are ones that you might have been exposed to during a standard computer science degree.
"Professional" is a relative term.. but anyways, this is what i had to go through so that i could easily learn a new language anytime i want and also master it:
started by learning a simple console language (pascal or c++, but i consider pascal being simpler than c/c++), then learned another language just to see if i can do it (c++)
i learned a lot of algorithms and data structures, until i was able to recreate them and even create my own
i moved to a visual approach on programming with Visual Basic 6 (another simple one to start with), and tried to copy lots of apps just to see if i can do it
i learned about Object-Oriented Programming and finished by mastering it
from this step on, learning a new language was like a hobby, like playing!
then i wanted to learn some different topics, like design patterns, multithreading, and so on..
moved from windows to mac, and started learning objective-c: because i already knew lots of languages, it took me 5 days to learn objective-c, and yes, i took breaks like any human being :P
after i learned obj-c, i now had to learn cocoa... this one took me a lot of time to learn, and i still don't know it all.. but i do know most of it :D
What are the most valuable parts of Computer Science studies for Cocoa developers?
Learn that it's important to understand the differences between languages, not learning a particular language.
Are you writing numerical method solvers with a Cocoa frontend? You'll want to take numerical methods. Writing a 3-D plugin with a Cocoa UI? Better learn about Catmull-Rom splines.
A good understanding of computer graphics is required if you want to make some good looking animations :)