YOUR TASKS
- Planning, estimation and coding of different Backend systems (E-Commerce, Crawlers, API’s, Apps);
- Write CLI applications in PHP, Python or Ruby;
- Support to the Backend Team Leader in development tasks;
- Deliver high-quality, bug-free, high-reliable backend systems;
REQUIRED SOFT SKILLS AND EXPERIENCE
- Minimum five years of experience in Backend systems;
- Strong knowledge of OOP and Design Patterns;
- Advanced knowledge in PHP (Certification+);
- Advanced MySQL customization and design;
- Knowledge of HTML, CSS and JavaScript (Node.js+);
- Extensive experience in different Operational Systems (Windows, Linux, iOS, etc);
- Solid understanding of HTTP;
- Experience with Automatic Deployment Process, Continuous Integration, BDD, TDD and other agile practices;
- Experience with PHP Frameworks (CakePHP, Symfony2, Zend, Zend2, Magento);
- Experience in working with different API’s (Facebook, Twitter, GData, LinkedIn);
- Experience with Versioning Systems (CVS, SVN, GIT);
- Experience in at least more three programming languages (Python, Ruby, Java or C#);
- Understanding of SOAP and RESTFull applications;
- Be a pragmatic developer with focus on results;
- Attention to detail and high-quality standards;
- Pro-active behavior;
- Great communication skills;
- Ability to work in a team with a positive attitude;
- Advanced English skills;
OUR OFFER
CONRAD CAINE is looking for smart programmers who are willing to join our pragmatic Backend team. If you are looking for a great company to grow professionally and personally, our team is your place. Here you will find a very open and friendly working environment and many challenges to overcome. Became a part of our great team now.
Please send an online application in Portuguese or English to
jobs.pelotas@conrad-caine.com
Have you heard about node.js?
If yes for sure you know npm, the packager manager for node.js, that is massive used in several projects.
What about PHP?
Well, PHP we already know the pear, a framework and distribution system for reusable PHP components. But that is usually used as global package manager, when you install you use for every project in the same machine that you have installed.
What about config package dependencies as NPM allow for node.js, where it’s possible setup dependencies for a specific project, well for that we can use the Composer dependence manager. As describe in the website of composer:
Composer is a tool for dependency management in PHP. It allows you to declare the dependent libraries your project needs and it will install them in your project for you.
So the idea behind this, is if you have a project that depends of some other libraries and these libraries depends of some others, you can setup the composer to install these dependencies. Each project have the composer.json where you are able to define what libraries/code your project depends on to work, and also where should be installed these libraries, and those projects also can depends of others and so on… and in the end, with just one command, all the things get installed to work together.
To use composer it’s quite simple you may follow the instructions here to install, and after that just run the command that install all the dependencies:
php composer.phar install
It’s really nice to see how much the language is growing up in the last few years, it’s getting a lot mature and the focus have been set to quality, agility in the development and deployment. The PHP community is to be congratulated, they always are seeking around for the best practices in the other languages and put all this effort into the PHP language and the PHP libraries/tools/frameworks.
CakePHP is great, I love this framework, it’s really fast to develop and it’s possible to maintain a great code inside this framework, I like the rules that CakePHP impose, I like that CakePHP is an obstructive framework, it makes easy to training the team, and put new members inside the team, and to everyone keep one standard.
BUT, one problem that comes not just with CakePHP but with several frameworks, is the usage of the Model. it’s not really a problem, but I think that is the way that people learned MVC with the framework, and the way that we see the Controller.
Frameworks, such as CakePHP, Rails and so on, impose that Model is database access (not really, but they come with this access).
Is that wrong? NOT really wrong…
As the fact that normally your application will need to save data into one database, or filesystem, etc… So provide one database access inside our model probably will help us.
What is the problem?
The problem comes when you see your model as JUST one database access layer, see the model as the thing that will store our data. So we start write the system logic inside the Controller, and this Controller starts to grow, because it already has several roles in our application, it handle the request, it handle the input, it call the model, it call the view… and it also get an additional role that is have the system logic. So our controller get FAT, hard to maintain, hard to change, hard to test, hard to change. It start to has the action methods, some other private/protected methods to implement logic, and it get ugly, strange, BIG.
What about our model?
The model keep thin, with no methods, no logic, just with the relationships of our database, with the validation… does it seems strange for you?
So what hell we are not using our model?
YES, we should use our model to make the logic of the system, is that the M of our application, is what Model must be, and is what the Model is expecting.
How we can start use our model as the logic part of our applications?
- STOPING to see the Model as your database access;
- Writing methods inside our models;
- Creating models without usage of database;
- Making the models talks each other;
- Importing libraries, objects inside or model;
- Creating one API inside or models, to make easy the calls for the controllers;
- Make your controllers as much thin as possible.
What will be your gains?
- You will probably have more freedom to make your logic;
- Your code will be more simple to maintain;
- It’s simple to write test for Models;
- You will have a better OO structure of your logic;
- You will start think different about Behaviors, Components in CakePHP;
- Your controller will be thin, and make just what he should do, nothing else;
- You will stop rewrite code, the model can be called in any controller that you want;
- With a good structure of logic, it will be so much easy to upgrade your code to new versions of the framework, or why not, migrate to another framework, as the fact that your logic system will not depends more of the features that CakePHP has.
To summarize, CakePHP is great, it has great tools to make our development fast, but what we can not do is misunderstand the MVC, and starts to be addict with bad practices. Frameworks like Zend make it more simple to understand, because it not provides directly in the model one database access, BUT anyway in CakePHP we can make the thing correct too, and get everything good of the framework.
So the idea behind the post is not forget the Controller, but pay much more attention in your Model.
Hi
I’m here to promote a new plugin to upload in CakePHP, the Attach plugin, that is based on MeioUpload, but it’s a bit different, he makes use of new Model API of CakePHP 2, where we have support to define own validations and use the Behavior as the method of validate, and also some new things.
A big difference is the use of Imagine Lib, to make the thumbnails, that gives a lot of features to manipulate images.
The plugin also implements polymorphic models, so we have one model/table that handles/store all the files, and your custom models have association with this Attachment model.
It’s really simple to use I hope you guys enjoy the plugin any improvement or feedback are welcome, and you are able to fork it.
Currently the plugin is in his first version, and improvements will be done in the API of the plugin also in the code.
Git: https://github.com/krolow/Attach
* In the github we have the description of how it works.
Your task
- Support in the maintenance of existing projects
- Study the development practices of our Backend Team
- Get working knowledge in different Content Management Systems and PHP Frameworks
- Support Lead Developer in getting things done
- Support small projects in cooperation with project managers
- Learn how to be a pragmatic developer
- Learn and code a lot of cool stuff (Node.js, MongoDB, CouchDB, Ruby, C++, Arduino)
- First experience with Code Editors
- Experience with Versioning Systems (CVS, SVN, GIT)
- Demonstration of self-reliance and responsibility in your work, taking a goal-oriented approach to projects
- Attention to detail and high-quality standards
- Pro-active behavior
- Good communication skills
- Responsibility
- Ability to be self-taught
- Fast-learning
- Ability to work under pressure
- Ability to accept and learn from criticism
- Willingness to work alternate shifts
- Will for experimentation and innovation
- Ability to identify, prevent and resolve imminent problems
- Willingness to understand technologies beyond your working knowledge
- Ability to work in a team with a positive attitude
- Excitement about current tasks and motivation to take on future challenges
- First English skills
CONRAD CAINE is looking for smart programmers who are willing to join our pragmatic Backend team. If you are looking for a great company to grow professionally and personally, our team is your place. Here you will find a very open and friendly working environment and many challenges to overcome. Became a part of our great team now.
Please send an online application in Portuguese or English to jobs.pelotas@conrad-caine.com
More open jobs available at Conrad Caine website.