Click to See Complete Forum and Search --> : At A Standstill
xc-runner
07-29-2008, 02:21 AM
This may turn into a long boring rant, but I'll try to keep my question focused.
A year ago I left a high stressful marketing/design job to delv into the world of web development.
I wore many hats at this last job and web design was one of them so i thought leaving and focusing on that was a good thing. A year later I'm still happy I've made the decision but feel I've hit a plateau. My tasks mainly include almost all of the graphical work, usability, basic page layout and anything else that falls into the realm of someone who is a visual problem solver. My issue is, the rest of my team are all developers, some really good at PHP, Javascript, DB, AJAX etc...It's starting to make me thing I can take this skill set of mine and really expand on it within my current job and beyond. My problem, code does not come easy to me, CSS and HTML I have down but I look at PHP and Javascript and get a headache. My Question is, is there a role in the future of a web designer who is good at the graphics but can't code worth a damn, or should I put the kabash on my social life and study PHP & JS til my head explodes?
And for that matter, just because I work with PHP, JS & AJAX, does that mean it's the best to learn even if I were to travel down that road?
Thanks
Hope for some insight. :)
Benjamin
07-29-2008, 04:56 PM
It's a tall order to be great at both visual design, and front-end coding (HTML/CSS), and back-end (server-side) coding. I would guess that very few people manage it in the world. It's not that one person cannot have the talent to do all these things really well, it is more a question of time and focus. I think changing hats takes time, and if you're going to be good, you need to really immerse yourself in your chosen area.
If you already cover graphic/visual design AND front-end coding, then you're already doing a lot, in my view. In many design agencies they would separate out these 2 skills (which has its own drawbacks, of course).
Having said that, it could be beneficial to learn a little about each area, and even try it out. Just keep it as a side project.
noantsinmypants
07-29-2008, 06:21 PM
this is a legit question, because as i am just getting through school, i have wondered this myself.
I would say, that the more you know the better. But to stray away from a social life could be, well... not a good thing. Designers need a social life. I tend to enjoy designing and creating art more than social experiments, but i find myself needing that social front.
DesignVHL
07-29-2008, 07:59 PM
IMO everyone is different. Some people can learn and understand it all very well....others struggle in certain areas. Me personally, I think I excel on the design front, and am pretty good with HTML and CSS code - enough to sell high quality visual and functional websites for clients. When it comes to PHP and other backend db coding and stuff, I outsource those I know for whatever I need. I do have to say that the people who are more understanding of the coding side of things DO tend to be a bit less creative visually - which is why a good strong team can work wonders - or even just a partnership if your an independent designer.
I always feel like technology moves faster than my time to learn allows...as a moonlighter my social life while still existent, isn't what I'd like it to be. I think its important not to stretch yourself TOO thin though, else you can lose sight of what you really are best at. But it never hurts to try new things, and if you have the time, dig deep enough for it to make a difference in what you can offer your clients.
urstwile
07-30-2008, 07:17 AM
It's a tall order to be great at both visual design, and front-end coding (HTML/CSS), and back-end (server-side) coding. I would guess that very few people manage it in the world. It's not that one person cannot have the talent to do all these things really well, it is more a question of time and focus. I think changing hats takes time, and if you're going to be good, you need to really immerse yourself in your chosen area.
If you already cover graphic/visual design AND front-end coding, then you're already doing a lot, in my view. In many design agencies they would separate out these 2 skills (which has its own drawbacks, of course).
Having said that, it could be beneficial to learn a little about each area, and even try it out. Just keep it as a side project.
I'd like to say that this is one of the most well-thought out and intelligent responses to this kind of question that I've seen in a very long while. Thank you Benjamin.
I think in our day and age today, we've become accustomed to the mindset that we should, and that it's possible, to be the be-all and end-all for every solution our clients require. Certainly in this day and age of software wizards, I guess people feel like they should either a) have an easy button or failing that b) learn everything, sacrificing all of their free time so that they can be a one-stop shop. I think this is unreasonable.
However, to second what Benjamin said in his post, I think having at least an understanding of what's involved, at least so that you can know when you're out of your league and it's time to bring in a hired gun, is a very good thing.
To amend, though, slightly, I think that learning can sometimes be a matter of "the cup overfloweth" concept. When you're fresh out of school, or fairly new to the industry, everything seems new, there's lots to learn, and you need to prioritize what it is that you need to learn first.
But over time, at least if you've been in this industry as long as I have (since 1977), your cup stops running over on the things that you initially prioritized, and then it's perfectly feasible that you can then learn new things that may have earlier seemed out of your reach, if you have the desire to do so.
Your desire to learn it has to drive all of that, however. If you have no interest in back-end coding, then I'm quite sure there are any number of people you could hire to help you get that sorted.
xc-runner
07-30-2008, 11:57 PM
Thanks for the great responses. Sometimes you just gotta vent a little and hear some other opinions to get your bearings straigtened out.
I still think it will be a struggle with me as long as I'm outnumbered 3 to 1 developers to front end designer, but hey, that can be the fun part.
So...round two of the question, anyone out there consider themselves a front end designer/developer. If so, how far into the code to you get. I mean, I've learned enough PHP to do includes and change content depending on the url with php self and if/else statements, but not much else.
Thanks
J
I take on both responsibilities at work. If I'm not styling or building the html for a site I'm interacting with a database through sql calls, creating a database table to store information or creating files to encapsulate functionality that is needed throughout multiple pages.
However, Due to the subjective nature of that question I figure its probably just best to show you and allow you to decide the answer. Like anything if your going to learn it you might as well learn to do it well. Knowing how to use a conditional or loop isn't going to get you very far when it comes to back end programming. Understanding Object Oriented methodology and its application/similarity to web programming is what would make you valuable as a backend developer responsible for php. Furthermore, knowing a server side language is only one part of the puzzle.
To accomplish anything useful with a server side language you will need to understand database relationships. You will also need to understand how to communicate with a database front end client such as mysql with the chosen server side language. This is because most of what goes into back end development involves communicating with a database. If you don't under these key components than I wouldn't consider you an asset to back end team.
If your truly serious about programming then I recommend picking up a book on java. Learning a actual programming language will help you to get away from the mentality of thinking of a website as website and more like an application. It will also aid you in understanding key methodologies existent in most web programming languages such as php, javascript and actionscript. Once you understand OOP methodology its relatively easy to move from language to language web wise and most other OOP languages for that matter.
<?php
abstract class AppModel extends App {
var $hasOne;
var $hasMany;
var $belongsToMany;
var $hasAndBelongsToMany;
protected $_db;
protected $_result;
private $_records;
public function __construct() {
$this->_db =& self::$_CONNECTION;
/*
* make arguments available
*/
$this->args =& self::$_ARGS;
//echo '<p>'.get_class($this).' created'.'</p>';
$this->_appendModel();
/*
* hasOne relationships
*/
if($this->hasOne) {
if(is_array($this->hasOne)) {
foreach($this->hasOne['tables'] as $model) {
$relatedModelName = strtolower($model['name']).'s';
$this->_newModel($relatedModelName);
}
} else {
$relatedModelName = strtolower($this->hasOne).'s';
$this->_newModel($relatedModelName);
}
}
/*
* hasMany relationships
*/
/*
* belongsToMany relationships
*/
if($this->belongsToMany) {
if(is_array($this->belongsToMany)) {
foreach($this->belongsToMany['tables'] as $model) {
$relatedModelName = strtolower($model['name']).'s';
$this->_newModel($relatedModelName);
}
} else {
$relatedModelName = strtolower($this->belongsToMany).'s';
$this->_newModel($relatedModelName);
}
}
/*
* init method called on creation. This is mainly here
* for required for top level app models such as navigation,
* config, etc to get their data automatically
*/
if(method_exists($this,'_init')) {
$this->_init();
}
}
/*
* generates a model
*/
private function _newModel($pRelatedModelName) {
$relatedModelClass = ucfirst($pRelatedModelName).'Model';
if(class_exists($relatedModelClass)) {
/*
* avoids duplicate models to be created
*/
if(!array_key_exists($pRelatedModelName,self::$_VA RS)) {
new $relatedModelClass();
}
}
}
/*
* sets dynamic variable whose name is the model name
* and value is equal to $this object.
*/
private function _appendModel() {
$name = $this->myNameIs();
$this->$name = $this;
}
public function buildSql($pId='',$pWhere='',$pOrder='',$pLimit='') {
$name = $this->myNameIs();
$select = array();
$joins = array();
$where = array();
$order = array();
$limit = array();
$sqlInfo = array(
'select'=>&$select,
'table'=>$name,
'joins'=>&$joins,
'where'=>&$where,
'order'=>&$order,
'limit'=>&$limit
);
if($this->has) {
if(array_key_exists('cols',$this->has)) {
foreach($this->has['cols'] as $column) {
$select[] = array('table'=>$name,'col'=>$column['col']);
}
} else {
$select[] = array('table'=>$name,'col'=>'*');
}
} else {
$select[] = array('table'=>$name,'col'=>'*');
}
if($this->hasOne) {
foreach($this->hasOne['tables'] as $model) {
$modelRealName = strtolower($model['name'].'s');
if(array_key_exists($modelRealName,self::$_VARS)) {
/*
* selects
*/
if(array_key_exists('cols',$model)) {
foreach($model['cols'] as $column) {
$select[] = array('table'=>$modelRealName,'col'=>$column);
}
} else {
$select[] = array('table'=>$modelRealName,'col'=>'*');
}
/*
* joins
*/
$joins[] = array(
'type'=>'left',
'tables'=>array(
array(
'table'=>$name,
'col'=>'id'
),
array(
'table'=>$modelRealName,
'col'=>substr($name,0,-1).'_id'
)
)
);
/*
* where
*/
if(array_key_exists('where',$model)) {
foreach($model['where'] as $wClause) {
$where[] = array(
'table'=>$modelRealName,
'comp'=>array_key_exists('comp',$wClause)?$wClause['comp']:'=',
'value'=>$wClause['value'],
'col'=>$wClause['col']
);
}
}
}
}
}
/*
* where clause(s)
*/
/* required to findById */
//$where[] = array('table'=>$name,'comp'=>'=','col'=>'id','value'=>$pId);
if($this->has) {
if(array_key_exists('where',$this->has)) {
$hs = $this->has['where'];
foreach($hs as $clause) {
$comp = array_key_exists('comp',$clause)?$clause['comp']:'=';
$where[] = array(
'table'=>$name,
'col'=>$clause['col'],
'value'=>$clause['value'],
'comp'=>$comp
);
}
}
}
/*
* order by
*/
if($pOrder!='') {
$order[] = array('table'=>$name,'col'=>'created','order'=>'asc');
} else if($this->has) {
if(array_key_exists('order',$this->has)) {
foreach($this->has['order'] as $arrange) {
$order[] = $arrange;
}
}
}
/*
* limit
*/
if($pLimit!='') {
$limit = $pLimit;
$limit2= count($limit)==2?implode(',',$sqlInfo['limit']):$limit['finish'];
} else if($this->has) {
if(array_key_exists('limit',$this->has)) {
$limit = $this->has['limit'];
$limit2= count($limit)==2?implode(',',$sqlInfo['limit']):$limit['finish'];
}
//$limit = array('start'=>0,'finish'=>20);
}
/*
* start building sql statement
*/
/*
* build select statement
*/
$select2 = array();
foreach($sqlInfo['select'] as $var) {
$col = strcmp('*',$var['col'])==0?'*':'`'.$var['col'].'`';
$select2[] = $var['table'].'.'.$col;
}
//echo implode(',',$select2);
/*
* build join comparison sequence
*/
$join2=array();
$join3=array();
foreach($sqlInfo['joins'] as $var) {
$comparisons = array(
$var['tables'][0]['table'].'.`'.$var['tables'][0]['col'].'`',
$var['tables'][1]['table'].'.`'.$var['tables'][1]['col'].'`'
);
$join2[] = implode(' = ',$comparisons);
$join3[] = strtoupper($var['type']).' JOIN '.$var['tables'][1]['table'];
}
//echo implode('AND',$join2);
$select3 = implode(' ',array($name,implode(' ',$join3)));
//echo $select3;
/*
* where statements
*/
$where2=array();
foreach($sqlInfo['where'] as $var) {
$comparison = array(
$var['table'].'.`'.$var['col'].'`',
is_string($var['value'])?'\''.$var['value'].'\'':$var['value']
);
$comp = array_key_exists('comp',$var)?$var['comp']:'=';
$where2[] = implode($comp,$comparison);
}
//echo implode(',',$where2);
/*
* order
*/
$order2=array();
foreach($sqlInfo['order'] as $var) {
$ord = $var['table'].'.`'.$var['col'].'`';
if(array_key_exists('order',$var)) {
$ord.=' '.strtoupper($var['order']);
}
$order2[] = $ord;
}
//echo implode(',',$order2);
/*
* limit
*/
/*
* set proir just easier. No reason to set it here
*/
/*if(isset($limit)) {
$limit2= count($limit)==2?implode(',',$sqlInfo['limit']):$limit['finish'];
}*/
//echo $limit2;
/*
* bringing it all together
*/
$sql = 'SELECT '.implode(',',$select2).' FROM '.$select3;
if($join2) {
$sql.=' ON '.implode(' AND ',$join2);
}
if($where2) {
$sql.= ' WHERE '.implode(' AND ',$where2);
}
if($order) {
$sql.= ' ORDER BY '.implode(',',$order2);
}
if(isset($limit2)) {
$sql.= ' LIMIT '.$limit2;
}
$sql.=';';
echo '<p>query: '.$sql.'</p>';
return $sql;
}
public function findBy($pName,$pValue) {
$name = $this->myNameIs();
$token = time();
$whereClause = array(
'col'=>$pName,
'comp'=>'=',
'value'=>$pValue,
'table'=>$name
);
if($this->has) {
$this->has['where'][$token] = $whereClause;
} else {
$this->has = array(
'where'=>array(
$token=>$whereClause
)
);
}
print_r($this->has);
$sql = $this->buildSql();
/* destroy whereClause */
unset($this->has['where'][$token]);
$this->sendToSql($sql);
if($this->_records) {
return $this->records->next();
} else {
return array();
}
}
public function __call($pName,$pArgs) {
/*
* If findBy found create magical reroute
*/
if(stristr($pName,'findBy')) {
$col = strtolower(substr($pName,6));
$this->findBy($col,$pArgs[0]);
}
}
public function sqlFormatedStatement() {
return $this->myNameIs();
}
public function formatCols($pCols='') {
if($pCols!='') {
}
}
/*
* query db and store result set
*/
public function sendToSql($pSql,$pAppend=true) {
$result = $this->_db->query($pSql);
if($pAppend) {
if(!$result) { return; }
if($result->rowCount()>=1) {
$this->_result = $result;
$this->_records = $result->recordSet();
}
} else {
return $result;
}
}
/*
* check for records
*/
public function hasRecords() {
return $this->_records?true:false;
}
/*
* public function
*/
public function getRecords() {
return $this->_records?$this->_records:false;
}
}
?>
;)
Free online java book if your interested.
http://math.hws.edu/javanotes/index.html
One other thing I will say is that even though I enjoy programming I don't find nearly as internally rewarding as design. However, at the same time I enjoy programming regardless of the end result. With design many times I enjoy just getting to end rather than the process of creative development. If that makes sense.
adamblan
08-08-2008, 04:46 AM
I do design + dev, & the biggest obstacle is in figuring out how to think like the computer (visions of $ and var dancing through your head...) tZ's right about picking up a programming language, but I'd go with actionscript instead of java - They're both OO, but it's easier to reference a visual object than a block of code :)