;

LMC: firmy touží po programátorech, je jich však výrazný nedostatek

30. 9. 2011

Sdílet

Na výsluní zájmu se s 5% podílem na všech vystavených nabídkách práce drží vývojáři aplikací. Rychle dostupných uchazečů o tuto práci je však vážný nedostatek, což reprezentuje pouhé 1 % vystavených CV. Čtvrtletní analýza Jobs.cz dále odhalila, že mezi pětici nejčastějších zájemců o IT odborníky nově vstoupily i dvě z předních tuzemských bank.

Vývoj zájmu o pracovníky v oborech IT a IS odráží příznivý vývoj celého pracovního trhu v letošním roce. Zatímco počet vystavených nabídek zaměstnání ve všech oborech na Jobs.cz meziročně stoupl o 27 %, v případě IT a IS došlo meziročně dokonce k 38% růstu počtu pracovních inzerátů firem. „Co se týče konkrétních pozic v IT, firmy dlouhodobě nejvíce hledají programátory. V této oblasti nabízejí dvojnásobek pracovních míst oproti druhé nejčastěji poptávané pozici, jíž je IT analytik. O schopné vývojáře zaměstnavatelé svádějí urputný souboj,“ uvedl Ondřej Mysliveček, analytik společnosti LMC, provozovatele pracovních portálů Jobs.cz a Prace.cz.

FirmaMysliveček coby žádanou vlastnost vyzdvihl také schopnost programátorů přizpůsobovat se aktuálním trendům. Stále více společností nyní přechází na agilní způsob vývoje produktů, jenž klade mnohem vyšší nároky především na programátory. Ti by neměli jen naplňovat přesné zadání, ale samostatně o úkolech přemýšlet a snažit se je vylepšovat,  či v případě potřeby korigovat s ohledem na efektivitu. „Kreativně přemýšlející vývojář, který je schopen do práce kromě samotného programování vnést i vlastní produktovou invenci a dokáže se na výsledek podívat také z pohledu uživatelů, je dnes pro zaměstnavatele jednoznačně atraktivnější,“ uvedl Mysliveček.

Mezi uchazeči o práci na Jobs.cz se sektor informačních technologií nedostal ani do první desítky nejžádanějších oborů. Odráží to fakt, že většina lidí s požadovaným vzděláním a zkušenostmi v IT již získala dobré uplatnění a ke změně zaměstnání by je přiměly jen výrazně lepší podmínky. Firmy jsou tak v tomto sektoru mnohem více než v jiných nuceny soupeřit o zájem uchazečů, například prostřednictvím nabízených platů, benefitů apod.

„Nedostatek relevantních uchazečů o IT pozice nutí zaměstnavatele hledat vhodné adepty již v průběhu jejich studií. Celkem běžnou praxí se v posledních letech staly partnerské programy předních IT firem s konkrétními vysokými školami. Studenti IT oborů díky tomu mají mnohem větší šanci na uplatnění než jejich kolegové např. s humanitním zaměřením. Zejména programátoři se po dokončení školy na pracovním trhu příliš neohřejí a ihned nastupují do svého prvního zaměstnání,“ uvedl Mysliveček.

Nejvíce uchazečů o práci v IT se nyní na Jobs.cz hlásí na místa správce operačních systémů, správce softwaru nebo technik hardwaru – tedy spíše na provozní pozice. Programátoři se vzhledem k vysoké poptávce firem na nabídkové straně trhu práce objevují až na sedmém místě, za projektovými manažery. Průměrná nabízená mzda pro IT specialisty nyní dosahuje výše 40 150 Kč, zatímco mzda, jíž průměrně požadují uchazeči o práci v IT, činí 27 900 Kč.

Našli jste v článku chybu?
'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
OSZAR »