Hey everyone. This is my first time posting on the h/a forum on the h side of things.
Long version here:
Basically, I am a computer programmer with a bachelor of computer science. I graduated in 06, worked geeksquad for a bit, then spent a year as a web developer for a small company.
Even at this company I constantly felt a bit over my head, though I excelled and the owners loved me. I eventually found another job as an internal systems developer for a regional company.
Ive been here about 2 months now. Ive had an internal project that went sort of ok, I felt in over my head at times, but managed to get my way through the more complicated parts. Now I am on another, much larger project.
The issue Im having is two fold:
1) When I accomplish stuff, I am always very very concerned that perhaps I did not code it the best way I can. That I sort of maybe took easy routes and hacked together stuff to get things working right. I do not remotely TRY to take short cuts or hack stuff, but I just always am nervous I did things "wrong." Im very fearful that in a live user enviroment, things will slow down, or break...I try to QA as much as I can, but somethings might fall through the cracks.
but more importantly then that...
2) A lot of the stuff im doing is integrating older systems into a new php based intranet portal. basically redesigning older systems in mysql/php. But this requires me to work with systems I am not remotely familiar with, some of which are pretty unsupported. Right now we have a filepro database i need to find a way to synch with mysql...and I am pretty sure this may be impossible, and if it isnt, I certainly dont know how.
To top it off, I have no control over the server. So if I need a module installed, or PHP reconfigured, I have to ask someone to do it. But I am not very experienced with it. So, I am not even sure if what Im asking sounds retarded or makes sense. If I had access to a development server to play around with, I could learn a lot more about managing a linux, apache server...
It even turns out that one of the modules I NEED, the guy in charge of the linux box wont install because he would have to recompile the PHP installation to do so. So...im sort of out of luck there...
Short version, I constantly feel like im in over my head at my new job. (an internal php/mysql systems developer for a regional company) Im always dabbling in systems and technology I am not familiar with, nor claimed to be when hired. This makes me feel uneasy and unsure of how I am performing as an employee. Its a relatively small department so other then my boss theres only like 2 other people, none of which have more experience in my particular field. So...what can I do to gain enough knowledge to feel comfortable at my position?
Is this feeling relatively normal for my industry? I mean, you can only learn so much at school...technology always evolves so maybe its natural to feel like you dont necissarily have all the answers yet...
Posts
I did ask for my own linux box to have access to, but I was subtley rejected without actually being rejected. My boss just said "work on the redhat box for now"
So...I suppose I could ask again.
What's unfortunate is you don't have anyone who can do code reviews. I do them all the time for the developers on my team and it helps keep my skills sharp as well. I can understand your need to write "good code", but without someone else to review it for you there's really no way to know for sure other than trusting yourself.
On a side note, they are setting themselves up for disaster if they don't have a separate box for developers to work with.
Don't worry about feeling like you didn't code it right - everyone gets that I think. As long as it works and you are always trying to improve, you'll be fine.
I'm surprised you don't have a senior developer to audit your work and tell you where you could improve though.
God yes.
This. Particularly in a field that is so conducive to rapid change.
Our first game is now available for free on Google Play: Frontier: Isle of the Seven Gods
Don't fret too much about not doing it right. The best you can do is follow project guidelines and test. Other than that it's damage control if something goes catastrophic.
As for your filemaker database, (I assume that's what it is) there are a few tools out there to convert it to more popular relational databases.
So yeah, it's normal for the software industry. Most of us like it that way. If I spent every day being asked to do something that I already knew how to do, I would probably get bored and quit in short order.
Here are a few things you can do, though. These are all things that I do.
1) Grab VMWare and set up virtual machines to match whatever environment you are developing in or are about to do something you're not comfortable with in and try it there first.
2) If you're willing to spend a little money and the VMWare route isn't cutting it, you can get dedicated servers that you have full control over for $60-$100/month depending on your exact needs. Mine is at sagonet.com.
3) Do projects on your own that go beyond what you are doing at work - more complex apps, new languages, etc.
4) Pay attention to what other developers are talking about. If you hear other developers frequently talking about something you don't understand or even know what it is, start reading up on it. As a fully self taught developer with no formal education, I do this all the time to try to learn the things I missed out on by not having a degree.
As to the live stuff on a dev machine? It sucks, but it happens. I've got the same situation where I work with some apps that are not mission critical. It has definitely caused problems a few times. Make it known that it's not the best idea and that you'd really like to change it and why you'd like to do so. After that, do what you can and hope for the best.
It's normal dude.
At least that way you could try some things out yourself to gain some knowledge.
As for a development server at home. Yeah I can do that. The problem is, we have a pretty complex (at least compared to what I know) thing going here. Our entire network is ran on an active directory system, so all windows users and stuff are stored on that.
(that was actually my first big 'what the heck do i do here?' situation...I had to find a way to get php applications to be based on windows credentials in the active directory database...i pulled it off though!)
Beyond that, our old systems are all apparently built on an archeic database called filepro.
Unfortunately, this is not, file maker pro...
https://www.fptech.com/
http://en.wikipedia.org/wiki/FilePro
I cant really find too much support on it since like...04, and even that is just random filepro devs looking for work or something. Its daunting to say the least.
Point is, i can definately try to set up my own linux system. We use redhat here, but is there a lot of diffeences between them? Thats one area I feel completely ignorant on, managing a linux-apache server. I want to learn badly, but Im not even sure where to start.
I feel like I should learn on my own a bit before assertively asking for my own development server to manage here in the office. Since, id rather know what Im talking about a bit when I have that conversation.
As for not having a senior programmer, the problem is we are not a development company. We sell carpet. We just have a 5-6 man IT team with 3 developers making and managing internal systems. We are a pretty tech driven company given what we do, so thats really nice. The issue is I was hired to be "the php guy" so really theres nobody here who is above me in that regard.
I guess, when I get home tonight I will begin trying to convert my old PC into a development server to mess around with. Gotta learn some how.
The rewards are buckets of money, autonomy or a leadership role - you could write your own ticket. This is a merit-based game and I love it. The risks are crippling an organization, souring your reputation in your local hiring pool and even potential lawsuits. But I do love the colour Green!
You've already identified your next action - implement a development environment, post haste. Use an old workstation - anything. If you're experimenting, you have to be able to do it without fear.
My advice is to read, read, read on your time and quickly build a cursory level of knowledge. Know what your options are (be it frameworks, IDEs, design patterns & practices) - try to develop breadth of knowledge right away. Let the problems you solve on the job, and your own interests dictate your depth of knowledge.
Do not be afraid to (tactfully) push back at times to your manager. They hired you because they lack what you have. It's much, much worse to remain silent and let them build a house of cards on your watch than to have a few heated debates.
Number #1 thing to do, even if you disregard everything else in my post - DOCUMENT WHAT YOU DO. I'm not talking about massive paper trails for every change or release, either. I'm talking about being able to answer the question "What did you do today?" with quantitative information. This is how you earn, this is how you make business cases for additional resources, this is how you recall all of those gnarly things you solved at this job when you're interviewing for your next gig.
Also, what you've pulled off so far is pretty impressive. I've seen a lot less complex work get tossed out as "impossible" by people who've been in the business for a good long time, only because they didn't have your will to give it an honest try.
I felt terribly overwhelmed for a very long time at my job; I went in thinking I knew what I was doing, only to be schooled pretty hard by someone who's been in the business for a lot longer and knows all the tricks. I was willing to learn, always worried about whether what I was doing was "the right way" to do it, and willing to change my mind. Now, three years on, I occasionally get to show off a trick or two of my own. Just keep on trying new things and building up your skills and range of experience.
//My vote for setting up your own dev environment, if possible. Virtual PC is free, if all else fails. And your Linux dude shouldn't need to recompile all of PHP to install a module unless he did something really, really weird with the initial build.
If the company won't get you a server, see if they'll spring for some reference books.
Also - backups!
Now to tackle the current issue.
I am trying to install a virtual server of centos to see if I can get the php extension I need installed. So far its going ok, we will see how that turns out.
However, with regards to the extension itself. I dont know much about the differences between linux builds. But the extension seems to be built for mandrake. Does this mean it would not work on centos? Or are most linux builds similar enough where the php extensions for them would be pretty cross platform?
If they don't have it in yum, is the extension available via pear? Pear is the official php repository, much like cpan is for Perl.
How would I check yum to see if its there?
This is the pecl reference to the extension. I have found some RPMs for it too but I dont know which build would be used.
In a slightly more immediate concern, when trying to install centos, vmware is asking me to format the drive, it is specifiying a 20 Gig drive that I believe VMware has set up for me: VMware, VMware Virtual S
Im pretty confident that if I click ok, it will simply format this virtual 20gb partition, however, notices like that always scare me, and the last thing I want to do is format my hard drive. Am I ok to allow this format to occur?
This is the most accurate thing i've ever read on the internet.
OP: As others have said, what you're feeling is totally normal.
The only difference between these states is that the second person understands how much he doesn't know about programming.
For example, did you know that .NET doesn't have a built in class capable of doing SFTP? When work asks you to do something that uses SFTP, you run into brick walls fairly quickly until you figure things out, and that's the difficulty with programming in general =D
As a software engineer myself, I agree. There is no way to be 100% prepared. Use the job as an indicator of what you need to learn.
I managed to get the filepro php extension working in mandriva and tested it on a backup of our filepro system. I was able to successfully pull the filepro data into PHP (which means I can dump it into mysql with some parsing)
The trick now is getting this to work on rehat.
I contacted the person who last managed the extension and asked if they knew of a redhat distribution for it. They then pointed me towards the source.
it consists of a .c, .h and bunch of other files...
http://svn.php.net/viewvc/pecl/filepro/trunk/
I am pretty sure I need to figure out how to turn this into a .so file, compiling on my centos server so it can work. But i have no idea how to do that. Does anyone have any experience with any of this? Or should I find a more specific medium to ask for assistance on this one?